【发布时间】:2019-05-22 00:11:56
【问题描述】:
我们启动了一个 iOS 应用,我想从 App Store Connect API 获取一些信息(例如安装、更新、评论)。
我按照 Apple 官方文档中的描述创建了一个 JSON Web Token:Link
之后,我使用标头中的令牌发出请求。现在我得到一个'401' | 'NOT_AUTHORIZED' 每次作为答案,见下图: REST Response
在下面的sn-ps中可以看到我的python代码(我试过用Python和R解决,但结果总是一样)。
首先,我创建一个 JWT:
从日期时间导入日期时间,时间增量 从何塞进口 jwt,jws 进口ecdsa KEY_ID = "XXXXXXXXX" ISSUER_ID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" PRIVATE_KEY = open('AuthKey_XXXXXXXXXX.p8', 'r').read() TIMESTAMP = int((datetime.now() - timedelta(minutes = 45)).timestamp() * 1000) 声明 = {"iss" : ISSUER_ID, “exp”:时间戳, “aud”:“appstoreconnect-v1”} 标头 = { “alg”:“ES256”, “孩子”:KEY_ID, “典型”:“智威汤逊” } # 创建 JWT 编码= jwt.encode(声明,PRIVATE_KEY,算法='ES256',标头=标头)现在当我打印 encoded 时,我开始关注 JWT(看起来对我有效):
'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IlhYWFhYWFhYWFgifQ.eyJpc3MiOiJYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFgiLCJleHAiOjE1NDUzOTc1MTQ1ODAsImF1ZCI6ImFwcHN0b3JlY29ubmVjdC12MSJ9.eTl6iaAW-Gp67FNmITrWCpLTtJzVdLYXIl5_KKgqaNgzwyGo7npBOBo9_u5PtLNnssQFEwJWbPND-6Ww5ACgEg'即使我通过 Base64 解码 JWT 的前两部分,我也会得到正确的 Header(它还包含正确的编码算法:'alg': 'ES256')和 声明:
从 jose.utils 导入 base64url_decode 打印(base64url_decode(b'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IlhYWFhYWFhYWFgifQ')) 打印(base64url_decode(b'eyJpc3MiOiJYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFgiLCJleHAiOjE1NDUzOTc1MTQ1ODAsImF1ZCI6ImFwcHN0b3JlY29ubmVjdC12MSJ9'))所以现在,我认为 JWT-Object 已准备就绪,我将请求发送到 API:
导入请求 JWT = 'Bearer' + 编码 URL = 'https://api.appstoreconnect.apple.com/v1/apps' HEAD = {'授权':JWT} 打印(头部) R = requests.get(URL, headers=HEAD) R.json()现在我们可以看到我的问题了,看图:Header | REST Response
请注意,我已经隐藏了示例的 KEY_ID、ISSUER_ID 和 PRIVATE_KEY。
【问题讨论】:
-
你能用令牌使用 URLRequest 和 URLSession 吗?