linpei
import time
import jwt
import requests
import json
from jwt.algorithms import RSAAlgorithm
from django.utils import timezone
from datetime import timedelta
import ******.settings

data_list = {
    "errMsg": "getUserInfo:ok",
    "userInfo": {
        "openId": "******",
        "fullName": {},
        "authorizationCode": "******",
        "identityToken": "******",
        "realUserStatus": 1
    }
}
timezone.now()
TEAM_ID = \'******\'
BUNDLE_ID = \'******\'
ALG = \'ES256\'
KID = \'******\'
CODE_URL = \'https://appleid.apple.com/auth/token\'
GRAND_TYPE = \'authorization_code\'
AUD_URL = \'https://appleid.apple.com\'
AUD_WS = \'appleid.apple.com\'
TOKEN_URL = \'https://appleid.apple.com/auth/keys\'
PRIVATE_KEY = """-----BEGIN PRIVATE KEY-----
******
-----END PRIVATE KEY-----
"""
# header = {"alg": "ES256", \'kid\': KID}
header = {"alg": "ES256", \'kid\': KID}
payload = {
    \'iss\': TEAM_ID,
    \'iat\': timezone.now(),
    \'exp\': timezone.now() + timedelta(days=180),
    \'aud\': AUD_URL,
    \'sub\': BUNDLE_ID
}
client_secret = jwt.encode(payload, PRIVATE_KEY, headers=header)


# print(type(client_secret))
def post_datas(code):
    post_data = {
        \'client_id\': BUNDLE_ID,
        \'client_secret\': client_secret,
        # \'code\': data_list[\'userInfo\'][\'authorizationCode\'],
        \'code\': code,
        \'grant_type\': GRAND_TYPE,
    }

    login_req = requests.post(url=CODE_URL, data=post_data,
                              headers={"Content-Type": "application/x-www-form-urlencoded"}
                              )
    if login_req.status_code == 200:
        pass
    else:
        post_data[\'grant_type\'] = \'refresh_token\'
        post_data[\'refresh_token\'] = \'******\'
        post_data[\'redirect_uri\'] = \'******\'
    key_req = requests.get(TOKEN_URL).json()
    # 从data那里拿到token的加密方式
    head = jwt.get_unverified_header(login_req.json()[\'id_token\'])
    token_key = head[\'kid\']
    # 找到相对应的公钥,一般会发布多个公钥
    for pub_key in key_req[\'keys\']:

        if pub_key[\'kid\'] == token_key:
            key_core = json.dumps(pub_key)
            # 打包公钥
            key = RSAAlgorithm.from_jwk(key_core)
            alg = pub_key[\'alg\']
            break
    else:
        print(\'Unable to find public key\')
        return None
    # 使用公钥来解密
    claims = jwt.decode(login_req.json()[\'id_token\'].encode("utf-8"), key=key, verify=True, algorithms=[alg],
                        audience=BUNDLE_ID)
    return claims[\'sub\']
print(post_datas(****))

  

分类:

技术点:

相关文章: