DeviceCheck:无法验证授权令牌

Posted

技术标签:

【中文标题】DeviceCheck:无法验证授权令牌【英文标题】:DeviceCheck: Unable to verify authorization token 【发布时间】:2018-10-31 23:21:09 【问题描述】:

我正在尝试让 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

【问题讨论】:

我原来的问题在这里forums.developer.apple.com/message/312475#312475 你有没有想过这个问题? 【参考方案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....")

【讨论】:

keyFileName = ""; // 从developer.apple.com/account/ios/authkeykeyId 下载 = ""; // 可以在:developer.apple.com/account/ios/authkey TeamId = ""; // 可以在:developer.apple.com/account/#/membership 找到 另外值得注意的是,只有从具有显式配置文件的应用程序生成的设备令牌才有效。通配符配置文件没有。

以上是关于DeviceCheck:无法验证授权令牌的主要内容,如果未能解决你的问题,请参考以下文章

JWT 令牌未经过验证,因此每次都返回 401 未授权

Spring oauth2服务器,无法验证令牌

无法验证 AAD 访问令牌 - IDX10511:签名验证失败

Azure AD 与 Web API 的不记名令牌身份验证无法正常工作并抛出错误,因为“此请求的授权已被拒绝”。

警告:无法使用设计验证 CSRF 令牌的真实性

如何在@Controller 中提取身份验证令牌