簡體   English   中英

使用 TLS 證書與使用身份驗證令牌的 iOS 推送通知

[英]iOS push notifications using TLS certificate vs. using authentication tokens

我正在閱讀使用 TLS 證書推送使用身份驗證令牌推送的文檔

但除了解釋如何配置每種方法之外,這些文章並沒有真正解釋兩種方法的差異或優缺點。 有人可以向我解釋它們嗎?

基於令牌的身份驗證較新,從本質上簡化了 APNS 身份驗證。 它基於您可以在 Apple 開發人員帳戶上生成的公鑰和私鑰對。

以下是它更簡單的主要原因:

  • 相同的密鑰可用於開發和生產應用程序,而使用基於證書的身份驗證時需要不同的證書。
  • 您的 Apple 開發者帳戶中引用的所有應用程序都使用相同的密鑰。 基於證書的身份驗證需要每個應用程序一個證書。
  • 密鑰不會過期。 證書確實會過期,需要每年更新一次。

一個很好的英特爾來源是 2016 年關於 APNS 的 WWDC 視頻: https : //developer.apple.com/videos/play/wwdc2016/724/

2020年,你只能現實地使用“令牌”方法。 較舊的方法是遺留問題,他們可能會砍掉它。

你的私鑰看起來像這樣

let keystring = `-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49Aas8d76as8das687asd687asd68as8brwUIWA46qcXis
zCu6dbd4s8d7b5s86gf98ugtr28re7089a7d6tbvpiiui524kyfpq9861eFJP7we
eE7rX4182609457ohgyj3lhgp98wfb698bfg69287f2k4htgwpo876grwo7XDklz
9fdg689d
-----END PRIVATE KEY-----`

您的密鑰 ID將如下所示

let keyId = "CTU7XXBPRH"

並且您的 Apple 團隊 ID 是您常用的 Apple 團隊 ID,看起來像“YWD3UUTEWD”。

如今 - 謝天謝地 - 在 Apple 開發者網站上從貴公司帳戶中獲取私鑰和​​密鑰 ID 相對容易。

如果你想在 AWS 上的普通 Node 服務器上測試發送推送,我強烈推薦這個優秀的新 npm,APNS2 https://www.npmjs.com/package/apns2

let bn = new BasicNotification(deviceToken, 'Hello')

發送推送就是這么簡單。

小貼士:

不要忘記該死的“開發/沙盒”推送只能在連接到您的 MAC/XCODE 的 IPHONE 上工作!

  • 開發/沙盒推送 - 僅適用通過 Xcode 運行構建並連接到 Mac的 iPhone

  • 生產推送 -它們與TestFlight構建完全一致

另外:不要忘記所謂的開發/沙盒推送通常是不穩定的。 通常,他們幾個小時都沒有到達,他們根本沒有到達,他們根本不在許多地區工作。

不要忘記,使用TestFlight應用程序完全可以使用“生產”應用程序。

所以

  1. 進行構建
  2. 將其推送到您的 TestFlight 帳戶。 像往常一樣等待幾分鍾,直到構建通過,
  3. 從 TestFlight安裝到您的手機
  4. 您現在獲得所有推送 - 立即!

而如果你

  1. 進行構建
  2. 只需構建/運行到您的系留iPhone
  3. 沒有得到任何推動。
  4. 的確,您可以獲得所謂的“開發”推送,但它們通常非常脆弱

(需要明確的是,在使用 APNS2 時,如果您確實想嘗試“開發”推送,要訂購“開發”推送,只需使用此處底部解釋的額外代碼行https://www.npmjs.com/package /apns2 )

2021 年,Apple 的設置遠程通知服務器狀態

這兩種技術各有優缺點,因此請決定哪種技術最適合您的公司。

Fattie 和 Ika 都表示基於 TLS/證書的身份驗證較差。 Firebase 中項目 UI也使用了不能解釋太多恕我直言的語言:

建議使用身份驗證密鑰進行配置,因為它們是向 iOS 發送通知的最新方法


證書認證的好處

  • 受限訪問證書。 每個證書都與您的開發者帳戶和環境(開發/生產)中的一個應用程序相關聯。 這避免了將所有雞蛋放在一個籃子里,如果您的令牌身份驗證密鑰被泄露,威脅參與者可以將通知推送到您的所有應用程序。
  • 更簡單的 Provider 應用程序邏輯。 提供者(與 APN 交互的服務)(您自己的服務器或您使用的服務)可以只使用 TLS 證書並進行身份驗證,而無需創建 JWT、向請求添加標頭或找到要使用的正確 App ID。

令牌認證的好處

  • 更簡單的設置過程:因為您只需要下載.p12並將其用於您的應用程序。 進入 developer.apple.com,創建一個推送通知密鑰。 但是,您的應用程序必須每小時更新這些令牌。 為 TLS 身份驗證創建.p12涉及更多。
  • 不會過期,因此您可以設置它並忘記它。 而 TLS 證書默認為 1 年到期。

問題歸結為安全性與便利性。

  • 方便(使用令牌身份驗證):創建密鑰並忘記(令牌身份驗證)很方便,您可能會使用 Firebase(或其他服務)每小時實際更新令牌,因此您沒有太多工作要做。
  • 安全性(使用 TLS 身份驗證):您真的想在所有應用程序之間共享相同的密鑰嗎? 如果您想限制推送通知服務提供商(例如 Firebase、Ably、Pusher)的范圍,但又不信任讓他們訪問您的所有應用程序,該怎么辦? 實際上,您可能只有 1 個應用程序,所以這無關緊要。

這種安全性是否重要,還是使用令牌身份驗證更方便? 我會說在大多數情況下,使用令牌身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM