Apple App Store Connect API请求401未授权问题求助
以下是针对你遇到的401错误的具体排查方向:
密钥文件读取异常
你读取的API密钥文件(.p8格式)必须完整包含首尾标记行:-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----,且中间密钥内容不能有多余换行或空格。检查读取后的Secret_key变量是否完整保留这些内容,避免因文件读取截断或格式错误导致签名无效。Issuer ID 拼写错误
你的代码中Issuer_ID = "XXXXXXXXx"末尾有小写x,但苹果的Issuer ID是全大写字母数字组合,不存在小写字符。确认Issuer ID是否完全匹配App Store Connect中显示的内容,修正后重新生成Token。API Key 权限不足
在App Store Connect创建API Key时,必须勾选Sales and Trends下的「Download Sales and Trends Reports」权限。如果Key未分配该权限,即使Token有效,也无法访问销售报表接口。冗余请求头干扰
你的GET请求添加了Content-type: application/json头,但GET请求无请求体,该头属于冗余内容。苹果API可能对冗余头敏感,尝试移除该头后重新请求。Token过期时间格式错误
JWT的exp字段要求是整数型Unix时间戳,但你用time.time() + token_duration生成的是浮点数。苹果服务器可能无法正确解析浮点数格式的过期时间,导致Token被判定无效。修改代码为:payload = { 'iss': Issuer_ID, 'exp': int(time.time() + token_duration), 'aud': Audience }Vendor Number 不匹配
确认filter[vendorNumber]的值是否与当前Issuer ID关联账号下的Vendor Number完全一致。若账号存在多个Vendor Number,选错会导致权限验证失败。Token签名有效性验证
虽然你通过无签名验证的方式解码了Token,但建议用苹果公钥实际验证签名是否有效。可使用pyjwt库结合苹果公钥完成验证,确保签名过程无错误。
内容的提问来源于stack exchange,提问作者MagellanStormcast

