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 加密!