iOS 使用 TLS 证书与使用身份验证令牌的推送通知

iOS push notifications using TLS certificate vs. using authentication tokens

我正在阅读两者的文档 push using TLS certificates and push using authentication tokens

但是除了解释如何配置每种方法之外,这些文章并没有真正解释这两种方法的差异或 pros/cons。有人可以给我解释一下吗?

基于令牌的身份验证较新,从本质上简化了 APNS 身份验证。 它基于您可以在 Apple 开发者帐户上生成的 public 和私钥对。

以下是它更简单的主要原因:

  • 同一个密钥可用于开发和生产应用程序,而 使用基于证书时需要不同的证书 验证。
  • 同一密钥用于您的 Apple 中引用的所有应用程序 开发者账号。基于证书的身份验证需要一个 每个应用的证书。
  • 密钥不会过期。证书确实会过期,需要每年左右更新一次。

有关 APNS 的 2016 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 上的普通节点服务器上测试发送推送,我强烈推荐这个优秀的新 npm,APNS2 https://www.npmjs.com/package/apns2

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

发送推送就这么简单。

提示:

不要忘记该死的“development/sandbox”推送只在 IPHONE 上起作用 MAC/XCODE!

  • development/sandbox 推送 - 仅适用于绑定到您的 Mac[= 的 iPhone 89=] 构建 运行 来自 Xcode

  • production 推送 - 它们在 TestFlight 中工作得很好 构建.

另外:不要忘记所谓的 development/sandbox 推送通常是不稳定的。通常,他们几个小时不到达,根本不到达,他们在许多地区根本不工作。

不要忘记使用 "production" 是完全可以的,简单地说,TestFlight应用

所以

  1. 构建
  2. 将其推送到您的 TestFlight 帐户。像往常一样等待几分钟,直到构建完成,
  3. 将它从 TestFlight 安装到您的 phone
  4. 现在得到全部推动 - 立即!

而如果你

  1. 构建
  2. 只需 build/run 连接到您的 网络 iPhone
  3. 没有得到任何推送。
  4. 确实可以获得所谓的“开发”推送,但它们通常非常古怪

(需要说明的是,在使用 APNS2 时,如果您确实想尝试“开发”推送,要订购“开发”推送,只需使用此处底部解释的额外代码行 https://www.npmjs.com/package/apns2

2021 年,Apple 的 Setting Up a Remote Notification Server 状态

Both techniques have advantages and disadvantages, so decide which technique is best for your company.

Fattie 和 Ika 都表示基于 TLS/证书的身份验证较差。 Project UI in Firebase 还使用了解释不多的语言恕我直言:

Configuration with auth keys is recommended as they are the more current method for sending notifications to iOS


Certificate Authentication

的好处
  • 有限访问证书。每个证书都绑定到您的开发者帐户和环境(开发/生产)中的一个应用程序。这避免了将所有鸡蛋放在一个篮子里,如果您的令牌授权密钥被泄露,威胁参与者可以将通知推送到您的所有应用程序。
  • 更简单的提供商应用程序逻辑。提供商(与 APN 交互的服务)(您自己的服务器或您使用的服务)可以只使用 TLS 证书,并进行身份验证,无需创建 JWT,将 headers 添加到请求或找到要使用的正确 App ID。

Token Authentication

的好处
  • 设置过程更简单: 因为您只需下载 .p12 并在您的应用程序中使用它。进入 developer.apple.com,创建一个推送通知密钥。但是,您的应用程序必须每小时更新一次这些令牌。为 TLS 身份验证创建 .p12 有点复杂。
  • 不会过期,所以你可以设置它并忘记它。而 TLS 证书默认在 1 年内过期。

问题归结为安全与便利。

  • 方便(使用token auth):创建一个密钥然后忘记(token auth)很方便,你可能会使用Firebase(或其他服务)实际上每小时更新一次令牌,所以你没有太多工作要做。
  • 安全性(使用 TLS 身份验证):您真的要在所有应用程序之间共享相同的密钥吗?如果您想限制推送通知服务提供商(例如 Firebase、Ably、Pusher)的范围,但不信任让他们访问您的所有应用程序,该怎么办?实际上,您可能只有 1 个应用程序,所以没关系。

这种甚至安全问题,还是使用 Token Auth 更方便?我会说在大多数情况下,使用令牌身份验证。