JWT
JWT( JSON Web Token)和 iOS 比較有相關聯的地方, 便是在於 APNs p8 是使用 JWT 格式作為傳遞; 而有關於 JWT 的相關資料,可以參考 這個網站。 以之前所提到的 APNs 來說,是由三個部分所組成:
- Header
- Payload
- Verify signature
Header
在 APNs 裡頭,需要包含這兩者
alg:所使用的加密方式(algorithm),p8 是使用 ES256 作為加密方式 kid:鑰匙的 ID(key identifier) 例如: alg: ES256 kid: 12345678
Payload
iss:所發送的人(issuer),這邊為開發者的 Team ID iat:所發送的時間(issued at)
Verify signature
這邊便是將上述兩者,分別做 base 64 加密後輸出成字串,再加上 p8 的 key, 一起做 ES256 加密後的結果,所以大概長這樣: {header base 64 encode}.{payload base 64 encode}.{ES256 hash[(header base 64 encode).(payload base 64 encode),key]}
Swift 版本的 APNs
這幾天便是在研究如何在 Swift 中,實做推播的功能,目前卡在內建的加密方式是 HMAC 的為主, 並沒有 ECDSA p-256 的方式(ES256 = ECDSA p-256 加上 SHA 256), 故加密那段仍未能完成。
徵求
對 ES256 有研究的大大,分享一下如何在 Swift 上實作 ES256 加密!