这行引起了我的注意:
map.add("pre", authorizationCode); // JWT pre we got from iOS该
authorizationCode不是
jwt
JSON Web令牌包含3个由点分隔的部分
但是
authorizationCode有4个部分,例如:
text1.text2.0.text3
您可能正在使用
identityTokeniOS应用中的,而不是
authorizationCode
这是您如何检索它:
let authorizationCode = String(data: appleIDCredential.authorizationCode!, encoding: .utf8)!print("authorizationCode: (authorizationCode)")对于遇到相同
invalid_client错误后可能会来到这里的人,也要谨记以下几点:
kid是来自developer.apple.com/account/resources/authkeys/list的私钥的ID。
keyFile是保存从developer.apple.com下载的私钥的文件
登录到developer.apple.com并单击帐户即可找到teamID,可以在右上角看到teamID
aud的值应为https://appleid.apple.com
app_id是应用程序的捆绑包标识符
如果有帮助的话,下面是在python中创建一个client_secret的可行解决方案:
# $ pip install pyjwtimport jwtimport timekid = "myKeyId" keyFile = "/pathToFile/AuthKey.p8"key = ""with open(keyFile, 'r') as myFile: key = myFile.read()print(key)timeNow = int(round(time.time()))time3Months = timeNow + 86400*90claims = { 'iss': teamID, 'iat': timeNow, 'exp': time3Months, 'aud': 'https://appleid.apple.com', 'sub': app_id,}secret = jwt.enpre(claims, key, algorithm='ES256', headers={'kid': kid})print("secret:")print(secret)client_secret = secret.depre("utf-8")print(client_secret)


