You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成的JWT Token提交至Apple服务器始终返回401未授权,求排查

排查App Store Server API JWT 401未授权问题

针对你提供的代码,以下是几个大概率导致401的错误点:

  • 密钥使用混乱
    代码里同时定义了$priv_key(HEREDOC内的密钥字符串)和从AuthKey.pem加载的$pem_private_key,但最后调用JWT::encode时用的是$priv_key。如果你的有效密钥是AuthKey.pem文件,那应该把JWT::encode的第二个参数换成$pem_private_key;如果密钥是HEREDOC里的内容,就删掉文件加载的冗余代码,避免混淆。

  • Audience参数错误
    你代码里的aud设为appstoreconnect-v1,这是App Store Connect API的受众标识,而非App Store Server API的。正确的aud需要区分环境:

    • 沙盒环境:https://api.storekit-sandbox.itunes.apple.com
    • 生产环境:https://api.storekit.itunes.apple.com
  • 密钥权限未配置
    确认你在App Store Connect生成的AuthKey已经开启了「App Store Server API」的权限。如果密钥没有对应权限,哪怕JWT签名正确,Apple也会返回401。

  • Bundle ID匹配问题
    检查payload里的bid值是否和App Store Connect中App的Bundle ID完全一致,大小写、拼写、特殊字符都不能出错。

  • 服务器时间偏差
    Apple对JWT的时间参数(iat/exp)校验严格,若你的服务器系统时间与UTC时间偏差超过5分钟,会被判定为无效Token。确保服务器时间同步正常。

  • JWT库参数或密钥格式问题

    • 确认使用的JWT库(比如firebase/php-jwt)参数顺序正确,JWT::encode的第四个参数是keyId、第五个是headers,和你代码里的调用一致。
    • 检查密钥格式:不管是HEREDOC还是AuthKey.pem文件,密钥内容不能有多余缩进、空格,开头结尾的-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----必须完整且正确。

内容的提问来源于stack exchange,提问作者cesarcarlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:05:31