如何验证“通过Apple登录”中的代码?

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令牌错误吗?

Wor*_*hy7 7

我的问题是我忘记在 Apple 开发门户的 Service Id 部分验证我的域。

您需要下载他们给您的密钥,并将其上传到:https : //example.com/.well-known/apple-developer-domain-association.txt

该网站不会自动验证,您必须单击验证按钮并在域旁边得到一个绿色的勾号才能确定。在此之后,我没有更多的invalid_client问题。

在此处输入图片说明

2020.07 更新

随着流程的变化,您只需将域和通信电子邮件添加到:

Certificates, Identifiers & Profiles > More > Configure

  • 嗯,我不再看到这个 - 也许他们最近改变了它 (4认同)