JSON Web Token

JWT

JWT( JSON Web Token)和 iOS 比較有相關聯的地方,
便是在於 APNs p8 是使用 JWT 格式作為傳遞;
而有關於 JWT 的相關資料,可以參考 [這個網站](https://jwt.io/introduction/)。
以之前所提到的 [APNs](https://www.archie.tw/apns) 來說,是由三個部分所組成:

  1. Header
  2. Payload
  3. 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 加密!