Han*_*shi 13 php jwt apple-sign-in
我正在尝试验证我在重定向Uri上从“使用Apple登录”服务获得的代码。我使用了文档中的信息来创建发布数据并生成“ client_secret”。
我得到的回应是:{"error":"invalid_client"}。
我的生成“ client_secret”的函数可以在下面找到:
function encode($data) {
$encoded = strtr(base64_encode($data), '+/', '-_');
return rtrim($encoded, '=');
}
function generateJWT($kid, $iss, $sub, $key) {
$header = [
'alg' => 'ES256',
'kid' => $kid
];
$body = [
'iss' => $iss,
'iat' => time(),
'exp' => time() + 3600,
'aud' => 'https://appleid.apple.com',
'sub' => $sub
];
$privKey = openssl_pkey_get_private($key);
if (!$privKey) return false;
$payload = encode(json_encode($header)).'.'.encode(json_encode($body));
$signature = '';
$success = openssl_sign($payloads, $signature, $privKey, OPENSSL_ALGO_SHA256);
if (!$success) return false;
return $payload.'.'.encode($signature);
}
Run Code Online (Sandbox Code Playgroud)
我在这个例子中的变量:
$ kid是我的私钥标识符。在此示例中,它是JYJ5GS7N9K。我从这里获得了标识符https://developer.apple.com/account/resources/authkeys/list
$ iss是我开发人员帐户中的团队标识符。在此示例中为WGL33ABCD6。
$ sub与“ client_id”具有相同的值。在此示例中,我的“ client_id”是“ dev.hanashi.sign-with-apple”。我从这里的应用程序标识符获取了客户端ID:https : //developer.apple.com/account/resources/identifiers/list
$ key是我通过开发人员帐户生成的私钥。密钥的格式如下:
-----BEGIN PRIVATE KEY-----
myrandomgeneratedkeybyappledeveloperaccount
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
这是发出请求的php代码:
-----BEGIN PRIVATE KEY-----
myrandomgeneratedkeybyappledeveloperaccount
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
我现在{"error":"invalid_client"}从苹果服务器得到响应。我究竟做错了什么?可能是我生成的JWT令牌错误吗?
我的问题是我忘记在 Apple 开发门户的 Service Id 部分验证我的域。
您需要下载他们给您的密钥,并将其上传到:https : //example.com/.well-known/apple-developer-domain-association.txt
该网站不会自动验证,您必须单击验证按钮并在域旁边得到一个绿色的勾号才能确定。在此之后,我没有更多的invalid_client问题。
随着流程的变化,您只需将域和通信电子邮件添加到:
Certificates, Identifiers & Profiles > More > Configure
| 归档时间: |
|
| 查看次数: |
1893 次 |
| 最近记录: |