Не удается заставить JWT (веб-токен json) работать с API-интерфейсом Apple App Store Connect в PHP - PullRequest
1 голос
/ 25 мая 2019

Я получаю возврат 401 / не авторизованный для моего JTW, используя PHP с API Apple App Store Connect.

Используя php 7.1.3, я пробовал различные библиотеки и сырой php (код ниже).Я почти уверен, что с заголовком и полезной нагрузкой все в порядке, и проблема в том, чтобы подписать их, используя файл закрытого ключа p8, который я скачал из Apple.Я четыре раза проверил файл «kid», «iss» и «private key».

        // Create token header as a JSON string
        $header = json_encode([
            'typ' => 'JWT',
            'alg' => 'ES256',
            'kid' => '1234567980'
        ]);

        // Create token payload as a JSON string
        $payload = json_encode([
            'iss' => '12345678-1234-1234-1234-123456789012',
            'exp' => time()+60*10, // 20 minute max allowed
            'aud' => 'appstoreconnect-v1'
        ]);

        $base64UrlHeader = rtrim(strtr(base64_encode($header), '+/', '-_'), '=');
        $base64UrlPayload = rtrim(strtr(base64_encode($payload), '+/', '-_'), '=');
        $privateKey = openssl_pkey_get_private('file://'.resource_path('/assets/AppleKey_1234567980.p8'));
        $signature = '';
        openssl_sign("$base64UrlHeader.$base64UrlPayload", $signature, $privateKey, 'sha256');

        // Encode Signature to Base64Url String
        $base64UrlSignature = rtrim(strtr(base64_encode($signature), '+/', '-_'), '=');

        // Create JWT
        $jwt = "$base64UrlHeader.$base64UrlPayload.$base64UrlSignature";

Когда я отправляю это в Apple с помощью curl, я получаю 401 / Not Authorized с подробной информацией «Учетные данные для проверки подлинности отсутствуют или недействительны» иничего более конкретного.

Кто-нибудь использовал Apple App Store Connect API с PHP - поиск в Google не дал результатов, которые я могу найти.

...