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应用
所以
- 构建
- 将其推送到您的 TestFlight 帐户。像往常一样等待几分钟,直到构建完成,
- 将它从 TestFlight 安装到您的 phone
- 你将现在得到全部推动 - 立即!
而如果你
- 构建
- 只需 build/run 连接到您的 网络 iPhone
- 你没有得到任何推送。
- 确实可以获得所谓的“开发”推送,但它们通常非常古怪。
(需要说明的是,在使用 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 更方便?我会说在大多数情况下,使用令牌身份验证。
我正在阅读两者的文档 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应用
所以
- 构建
- 将其推送到您的 TestFlight 帐户。像往常一样等待几分钟,直到构建完成,
- 将它从 TestFlight 安装到您的 phone
- 你将现在得到全部推动 - 立即!
而如果你
- 构建
- 只需 build/run 连接到您的 网络 iPhone
- 你没有得到任何推送。
- 确实可以获得所谓的“开发”推送,但它们通常非常古怪。
(需要说明的是,在使用 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 更方便?我会说在大多数情况下,使用令牌身份验证。