Бэкэнд-интеграция Вход с Apple - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь создать простой бэкэнд для поддержки входа в Apple. Следуя документации, я смог получить authorizationCode от клиента. Первая проблема заключается в том, что SDK предоставляет это значение в виде Data.

. Правильно ли преобразовать его в строку с String(data: authCode, encoding: .utf8) или мне нужно использовать authCode .map { data in String(format: "%02.2hhx", data) }, как с маркером push-уведомления?

Я думаю, что правильный путь должен быть первым, но я не уверен.

Мой внутренний код выглядит так:

    function handleRegisterTokenPost($arguments) {
        if (!isset($arguments['code'])) {
            badRequest();
        }
$key = <<<EOD
-----BEGIN PRIVATE KEY-----
my
multiline
api
key
-----END PRIVATE KEY-----
EOD;
        $kid = 'MYKID(from developer.apple)';
        $iss = 'MYTeamIdentifier';
        $clientID = 'MyBundleID';

        $token = array(
            "iss" => $iss,
            "iat" => time(),
            "exp" => time() + 100000,
            "aud" => "https://appleid.apple.com",
            "sub" => $clientID
        );

        $jwt = JWT::encode($token, $key, 'ES256', $kid);
        var_dump($jwt);
        $data = [
            'client_id' => $clientID,
            'client_secret' => $jwt,
            'code' => $arguments['code'],
            'grant_type' => 'authorization_code',
            'redirect_uri' => 'myredirecturl'
        ];

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, 'https://appleid.apple.com/auth/token');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

        $serverOutput = curl_exec($ch);

        curl_close ($ch);
        echo $serverOutput;

Когда я пытаюсь декодироватьТокен JWT (через jwt.io) Я получаю декодированный токен, очень похожий на тот, который использовался в качестве примера в документации (в конце страницы)

Я использую эта библиотека для кодирования токена jwt.

Проблема в том, что я продолжаю получать {"error":"invalid_client"}. У меня та же ошибка, даже если я предоставляю случайную строку как «код», поэтому я думаю, что это может быть проблемой при создании этого кода, но я не уверен.

Есть ли у кого-то идеяЯ могу попробовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...