我正在尝试让DeviceCheck工作,我不断从Apple的服务器收到以下响应:401 Unable to verify authorization token
。
device_token
正在通过 JSON 有效负载中的 base64 编码字符串发送到我的 python 服务器。知道我可能做错了什么吗?
这是我的代码示例:
def device_check_query(device_token):
data = {
'device_token': device_token,
'transaction_id': str(uuid4()),
'timestamp': int(time.time() * 1000),
}
jw_token = get_jw_token()
headers = {'Authorization': 'Bearer ' + jw_token}
response = requests.post(QUERY_URL, json=data, headers=headers)
return response.content
def get_jw_token():
with open(KEY_FILE, 'r') as cert_file:
certificate = cert_file.read()
jw_token = jwt.encode(
{'iss': TEAM_ID}, certificate,
algorithm='ES256',
headers={'kid': KEY_ID})
return jw_token
您需要在有效负载中添加颁发者密钥和 iat,然后它将起作用,请检查下面的代码
import time
def device_check_query(device_token):
data = {
'device_token': device_token,
'transaction_id': str(uuid.uuid4()),
'timestamp': int(time.time() * 1000),
}
jw_token = get_jw_token()
headers = {'Authorization': 'Bearer ' + jw_token}
response = requests.post(url, json=data, headers=headers)
return response.content
def get_jw_token():
with open('myfile.p8', 'r') as cert_file:
certificate = cert_file.read()
jw_token = jwt.encode(
{'iss': issuer,'iat': int(time.time())}, certificate,
algorithm='ES256',
headers={'kid': keyid})
return jw_token
device_check_query(u"1234e323a22133....")