gpt4 book ai didi

python - REST 请求 App Store Connect API 响应为 '401' | 'NOT_AUTHORIZED'

转载 作者:太空宇宙 更新时间:2023-11-03 21:25:16 24 4
gpt4 key购买 nike

我们推出了一款 iOS 应用程序,我想从 App Store Connect API 获取一些信息(例如安装、更新、评论)。

我创建了一个 JSON Web token ,如 Apple 官方文档中所述:Link

然后我使用 header 中的 token 发出请求。现在我收到“401”|每次都以“NOT_AUTHORIZED”作为答案,参见下图: REST Response

在下面的代码片段中,您可以看到我的Python代码(我尝试用Python和R来解决它,但结果总是相同的)。

首先,我创建一个 JWT:

    from datetime import datetime, timedelta    from jose import jwt, jws    import ecdsa    KEY_ID = "XXXXXXXXXX"    ISSUER_ID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"    PRIVATE_KEY = open('AuthKey_XXXXXXXXXX.p8', 'r').read()    TIMESTAMP = int( (datetime.now() - timedelta(minutes = 45)).timestamp() * 1000)    claim = {"iss" : ISSUER_ID,             "exp" : TIMESTAMP,             "aud" : "appstoreconnect-v1"}    header = {             "alg": "ES256",             "kid": KEY_ID,             "typ": "JWT"             }    # Create the JWT    encoded = jwt.encode(claim, PRIVATE_KEY, algorithm='ES256', headers=header)

现在,当我打印编码时,我会遵循 JWT(看起来对我有效):

'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IlhYWFhYWFhYWFgifQ.eyJpc3MiOiJYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFgiLCJleHAiOjE1NDUzOTc1MTQ1ODAsImF1ZCI6ImFwcHN0b3JlY29ubmVjdC12MSJ9.eTl6iaAW-Gp67FNmITrWCpLTtJzVdLYXIl5_KKgqaNgzwyGo7npBOBo9_u5PtLNnssQFEwJWbPND-6Ww5ACgEg'

即使我通过 Base64 解码 JWT 的前两个部分,我也会得到正确的 header (它还包含正确的编码算法:'alg':'ES256')和声明:

    from jose.utils import base64url_decode    print(base64url_decode(b'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6IlhYWFhYWFhYWFgifQ'))    print(base64url_decode(b'eyJpc3MiOiJYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFgiLCJleHAiOjE1NDUzOTc1MTQ1ODAsImF1ZCI6ImFwcHN0b3JlY29ubmVjdC12MSJ9'))

见下图:Output Base64 Decoding

现在,我认为 JWT 对象已准备就绪,我将请求发送到 API:

    import requests    JWT = 'Bearer ' + encoded    URL = 'https://api.appstoreconnect.apple.com/v1/apps'    HEAD = {'Authorization': JWT}     print(HEAD)    R = requests.get(URL, headers=HEAD)    R.json()

现在我们可以看到我的问题了,看图片:Header | REST Response

请注意,我在示例中隐藏了 KEY_IDISSUER_IDPRIVATE_KEY

最佳答案

您的 token 包含到期时间

"exp": 1545397514580,

等于 9 月 12 日,50941。

当我删除最后三位数字时

"exp": 1545397514,

我得到2018年12月21日这更有意义。

更改该行

TIMESTAMP = int( (datetime.now() - timedelta(minutes = 45)).timestamp() * 1000)

TIMESTAMP = int( (datetime.now() - timedelta(minutes = 45)).timestamp())

exp 是一个时间戳,定义为自 01.01.1970 00:00 以来的秒数另请参阅here

关于python - REST 请求 App Store Connect API 响应为 '401' | 'NOT_AUTHORIZED',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com