JWT
JWT( JSON Web Token)和 iOS 比較有相關聯的地方,
便是在於 APNs p8 是使用 JWT 格式作為傳遞;
而有關於 JWT 的相關資料,可以參考 [這個網站](https://jwt.io/introduction/)。
以之前所提到的 [APNs](https://www.archie.tw/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 加密!
連結全壞了