生成的 JWT 令牌在提交到 Apple 服务器时始终会导致 401

问题描述 投票:0回答:2

我在 PHP 中使用以下代码来生成 JWT 令牌以与 App Store Server API 一起使用:

$keyId = 'provided by apple';
    $priv_key = <<<EOD
    -----BEGIN PRIVATE KEY-----
    provided by apple
    -----END PRIVATE KEY-----
    EOD;

    $pem_private_key = file_get_contents('AuthKey.pem');

    $private_key = openssl_pkey_get_private($pem_private_key);
    $public_key_pem = openssl_pkey_get_details($private_key)['key'];
    $public_key = openssl_pkey_get_public($public_key_pem);
   
    $headers = [
        "kid"=> $keyId,
        "typ" => 'JWT'
    ];
    $payload = [
        "iss" => "provided by apple",
        "iat"  => time(),
        "exp"  => time() + (60 * 60 * 24 * 7),
        "aud" => "appstoreconnect-v1",
        "bid" => "com.bundle.my"
    ];
    $jwt = JWT::encode($payload, $priv_key, 'ES256', $keyId, $headers); 

这会产生 JWT 令牌。然而,当我尝试将它与 Apple Store API 一起使用时,我总是收到 401 Unauthorized;未经验证。

我做错了什么?

jwt apple-push-notifications app-store-connect
2个回答
1
投票

问题在于过期时间,因为 Apple 只允许最长 20 分钟的过期时间。

更改为 time() + 1200。


0
投票
private function generateJWT($key_id, $issuer_id): string
    {
        date_default_timezone_set('Asia/Shanghai'); // 设置为中国标准时间
        $private_key = <<<EOD
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
EOD;

//        $private_key = file_get_contents('/var/www/api/config/AuthKey_84PBGULHBW.p8');
//        // 确保私钥成功加载
//        if (!$private_key) {
//            throw new \Exception('无法加载私钥');
//        }

        // 设置 JWT 头部
        $headers = [
            'alg' => 'ES256',
            'kid' => $key_id,
            'typ' => 'JWT'
        ];

        // 设置 JWT 载荷
        $now = time();
        $payload = [
            'iss' => $issuer_id,
            'iat' => $now,
            'exp' => $now + (15 * 60), // JWT 过期时间设置为 15 分钟后
            'aud' => 'appstoreconnect-v1',
        ];

        // 生成 JWT
        $jwt_token = JWT::encode($payload, $private_key, 'ES256', $key_id, $headers);
//        print_r($jwt_token);die;
        return $jwt_token;
    } 

我也401救命 sos

© www.soinside.com 2019 - 2024. All rights reserved.