Я пытаюсь создать простой бэкэнд для поддержки входа в 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"}
. У меня та же ошибка, даже если я предоставляю случайную строку как «код», поэтому я думаю, что это может быть проблемой при создании этого кода, но я не уверен.
Есть ли у кого-то идеяЯ могу попробовать?