繁体   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