【问题标题】:iOS sending push with APNs Auth Key: suddenly "403 Forbidden: {"reason":"InvalidProviderToken"}"iOS使用APNs Auth Key发送推送:突然“403 Forbidden:{“reason”:“InvalidProviderToken”}”
【发布时间】:2017-03-02 07:39:22
【问题描述】:

我正在使用 APNs 身份验证密钥(“永不过期”)发送我的推送通知,该密钥运行良好,直到我突然收到

403 Forbidden: {"reason":"InvalidProviderToken"}

作为发送推送通知时的响应。当它工作一次突然它没有到期日期时,这可能是什么原因?与此同时,它再次进行了一些推送,但现在我再次收到错误...还有其他人遇到过这种情况吗?

编辑

不确定,但似乎这只发生在 Ubuntu 服务器上,而不是我的本地 (OS X) 机器上...

【问题讨论】:

  • 所以你目前可以发送一些通知,只是偶尔会收到这个 403?
  • 嘿,你找到原因了吗?我找不到出现相同错误的原因。 403 invalidProviderToken 我所有的参数似乎都是正确的,我的 jwt 似乎是合法的。
  • 没关系,我已经从开发者控制台创建了一个新的 APNS 身份验证令牌,现在它似乎可以正常工作了。
  • 也许他们的集群需要一些时间来传播失效更改?还是在传播所有更改之前失败?可能会解释再次开启,再次关闭的事情。或者某些服务器上的时钟可能会关闭?

标签: apple-push-notifications


【解决方案1】:

我在几种情况下看到过这种情况:

  1. 重新提交过期的提供者令牌似乎会将令牌列入黑名单,并导致随后的InvalidProviderToken 拒绝而不是ExpiredProviderToken 拒绝。检查您的日志以获取令牌到期消息。检查您的系统时钟,以确保您没有生成带有倾斜时间戳的令牌。

  2. 提交到无效主题将使连接上的所有提供者令牌(甚至以前有效的令牌)无效。只提交key绑定的topic,每个连接只使用一个key。

【讨论】:

    【解决方案2】:

    当使用相同的连接向不同的团队 ID 发送推送时,我们遇到了完全相同的问题。重现的步骤是:

    • 打开与 APNS 的连接并使用相同的连接

    • 向团队 ID 1234 的主题 com.companyA.xxx 发送基于令牌的推送:APNS 成功接受并交付推送。

    • 向主题 io.companyB.xxx 的团队 ID 5678 发送基于令牌的推送:APNS 响应 HTTP 400 BadRequest The device token does not match the specified topic
    • 再次向主题 io.companyB.xxx 的团队 ID 5678 发送基于令牌的推送:APNS 响应 HTTP 403 Forbidden: the provider token is not valid or the token signature could not be verified

    在此之后,无法发送任何推送,并且必须关闭并重新打开连接。

    我们最终做的解决方法是打开一个连接每个团队 idAPNS documentation 没有提到任何类似的东西,所以我认为这是一个错误,我打开了一个错误报告。

    【讨论】:

    • 非常有趣!感谢您报告此@Jan!
    • 作为跟进,我最终联系了 Apple,他们确认不能将连接用于不同的团队 ID。
    【解决方案3】:

    服务器确实以 InvalidToken 和/或 ExpiredToken 错误响应。您的身份验证令牌不应包含任何“=”、“+”、“-”,请仔细检查您的令牌是否没有这些。还有签名(令牌的第三部分,应该是 Base64URL 编码的,所以没有前面提到的字符)。

    【讨论】:

      【解决方案4】:

      对我来说服务器时间无效,修复服务器时间解决了问题

      【讨论】:

      • 空时也是一样,我的iat参数好像是空字符串
      【解决方案5】:

      对我来说,配置错误存在问题。我使用了错误的团队 ID。在您查看任何其他解决方案之前,请确保所有配置均正确无误。

      【讨论】:

        【解决方案6】:

        我一直使用密钥的名称而不是密钥 ID。验证 https://developer.apple.com/account/resources/authkeys/review/ 显示正确的值。

        【讨论】:

          【解决方案7】:

          我的情况是 json 漂亮的打印格式。与可以接受 jwt 漂亮打印格式的 musickit 不同,APN 只接受原始格式。

          详细说明: 我的信息是:

          {
            "alg": "ES256",
            "kid": "SOMEKEYID"
          }
          {
            "iss": "SOMETEAM",
            "iat": 1581110460
          }
          

          我通过 jwt.io 验证了结果 jwt,但是 APNs 一直告诉我 InvalidProviderToken。我已经尝试了上面的一切。没用。

          最后我把消息改成了:

          {"alg":"ES256","kid":"SOMEKEYID"}
          {"iss":"SOMETEAM","iat":1581128155}
          

          然后它没有错误地通过。

          原来 APN 不接受 json 漂亮格式!

          【讨论】:

          • 你能分享 AMGuru,你的请求的标题对(清楚地隐藏私人信息)吗?因为我试图删除空格,但“invalidprovider2 错误仍然存​​在
          【解决方案8】:

          我要求 Apple 将我的帐户从个人帐户更改为企业帐户。我的推送通知证书仍然显示一切正常,但通知不起作用,我收到了Invalid Token 的回复。一旦我撤销了证书并颁发了新证书(在 Apple Connect 中),一切正常。

          我浪费了很多时间试图弄清楚为什么推送通知不起作用。希望这会为其他人节省一些时间!

          【讨论】:

            【解决方案9】:

            Apple 的 APN documentation 说:

            APN 仅支持使用签名的提供者身份验证令牌 ES256算法。不安全的 JWT [JSON Web 令牌],或签名的 JWT 与其他算法,被拒绝,并且您的提供者服务器接收 InvalidProviderToken (403) 响应。

            所以,问题似乎不在于您的身份验证系统;这实际上是从您的密钥生成的网络令牌的问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-06-21
              • 2017-11-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多