我正在使用apns auth键("永不过期")发送我的推送通知,直到突然我得到
403 Forbidden: {"reason":"InvalidProviderToken"}
发送推送通知时的响应。当它运行一次时,造成这种情况的原因是什么,突然间,它并非没有到期日期?同时,它再次工作了一些推动,但是现在我再次遇到了错误...其他人是否遇到过?
编辑
不确定,但似乎这仅发生在Ubuntu服务器上,而不是在我的本地(OS X)机器上发生...
使用相同的连接发送向不同的团队ID时,我们遇到了完全相同的问题。复制步骤是:
-
打开与APNS的连接并使用相同的连接 to:
-
将基于令牌的推送发送到Team ID
1234
的主题com.companyA.xxx
:APNS接受并成功提供推动。 - 将基于令牌的推送发送到Team ID
5678
的主题io.companyB.xxx
:APNS响应HTTP 400 BadRequest The device token does not match the specified topic
- 再次将基于令牌的推动发送到Team ID
5678
的主题io.companyB.xxx
:APNS响应HTTP 403 Forbidden: the provider token is not valid or the token signature could not be verified
。
之后,不可能发送任何推动,并且必须关闭连接并重新打开。
我们最终要做的解决方法是每个团队ID 打开一个连接。APNS文档没有提及类似的内容,因此我确实将其视为错误,我打开了一个错误报告。
我已经在几个情况下看到了这一点:
-
重新提交过期的提供商令牌似乎使令牌被列入黑名单,并导致随后的
InvalidProviderToken
拒绝而不是ExpiredProviderToken
拒绝。检查您的登录令牌是否有效消息。检查系统时钟以确保您不会使用偏斜的时间戳生成令牌。 -
提交无效主题将使连接上的所有提供商令牌无效(甚至先前有效)。仅提交密钥绑定的主题,并且每个连接仅使用一个密钥。
对我来说,有一个不良配置的问题。我使用了错误的团队ID。在查看任何其他解决方案之前,请确保所有配置都是正确的。
服务器确实会以无效的响应和/或过期的通话响应。您的身份验证令牌不应包含任何'=',' ',' - ',仔细检查您的令牌是否没有。此外,签名(令牌的第三部分,应为基本64url编码,因此没有先前提到的字符)。
对我而言,服务器时间无效,修复了服务器时间解决问题
我要求苹果将我的帐户从个人帐户更改为业务帐户。我的推送通知证书仍然说一切都很好,但是通知不起作用,而且我得到了响应Invalid Token
。一旦我撤销了证书并发布了新证书(在Apple Connect中),一切都很好。
我浪费了很多时间试图找出为什么推动通知不起作用。希望这可以节省其他人!
我一直在使用密钥的名称而不是密钥ID。在https://developer.apple.com/account/resources/authkeys/review/上验证显示正确的值。
我的情况与JSON漂亮打印格式有关。与可以接受JWT漂亮打印格式的Musickit不同,APN仅接受原始格式。
详细说明:我的消息是:
{
"alg": "ES256",
"kid": "SOMEKEYID"
}
{
"iss": "SOMETEAM",
"iat": 1581110460
}
我通过jwt.io验证了JWT的结果,但是APN不断告诉我无效的Providertoken。我已经尝试了上面的一切。无用。
最后,我将消息更改为:
{"alg":"ES256","kid":"SOMEKEYID"}
{"iss":"SOMETEAM","iat":1581128155}
然后它通过而没有错误。
事实证明,APN不接受JSON漂亮格式!
苹果的APN文档说:
APNS仅支持与提供者身份验证令牌 ES256算法。无抵押的JWT [JSON Web令牌]或JWTS签名 使用其他算法被拒绝,您的提供商服务器收到 无效的Providertoken(403)响应。
因此,似乎问题与您的auth kiey没有;这实际上是从密钥生成的网络令牌的问题。