DeviceCheck:无法验证授权令牌

Luk*_*kas 7 python authentication ios jwt devicecheck

我正在尝试让DeviceCheck工作,我不断从Apple的服务器获得这个响应: 401 Unable to verify authorization token.

device_token过的JSON有效载荷base64编码字符串被发送到我的蟒蛇服务器.我有什么想法可能做错了吗?

这是我的代码示例:

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
Run Code Online (Sandbox Code Playgroud)

moh*_*ohd 1

您需要在有效负载中添加颁发者密钥和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....")
Run Code Online (Sandbox Code Playgroud)