相关疑难解决方法(0)

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

我正在尝试验证我在重定向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 …
Run Code Online (Sandbox Code Playgroud)

php jwt apple-sign-in

13
推荐指数
1
解决办法
1893
查看次数

Apple 登录“invalid_client”,使用 PHP 和 openSSL 签署 JWT 进行身份验证

我正在尝试使用此实现 Apple 登录到 Android 应用程序。文档中描述了主要流程:库在Android端返回授权码。必须将此授权代码发送到我的后端,后端又将其发送到 Apple 服务器以取回访问令牌。

如此此处所述,为了获取访问令牌,我们需要向 Apple API 发送参数列表、授权代码和签名的 JWT。特别是,JWT 需要使用 ES256 算法使用私有 .p8 密钥进行签名,该密钥必须从 Apple 开发者门户生成和下载。苹果文档

这是我的 PHP 脚本:

<?php

$authorization_code = $_POST('auth_code');

$privateKey = <<<EOD
-----BEGIN PRIVATE KEY-----
my_private_key_downloaded_from_apple_developer_portal (.p8 format)
-----END PRIVATE KEY-----
EOD;

$kid = 'key_id_of_the_private_key'; //Generated in Apple developer Portal
$iss = 'team_id_of_my_developer_profile';
$client_id = 'identifier_setted_in_developer_portal'; //Generated in Apple developer Portal

$signed_jwt = $this->generateJWT($kid, $iss, $client_id, $privateKey);

$data = [
            'client_id' => $client_id,
            'client_secret' => $signed_jwt, …
Run Code Online (Sandbox Code Playgroud)

php android openssl jwt apple-sign-in

4
推荐指数
1
解决办法
4660
查看次数

标签 统计

apple-sign-in ×2

jwt ×2

php ×2

android ×1

openssl ×1