Использование OAuth 2.0 для серверных приложений приводит к внутренней ошибке 500

Я пытаюсь использовать GoogleAPI для загрузки изображений на диск (который принадлежит одному аккаунту).

Поэтому я использую приложение сервер-сервер и пытаюсь выполнить шаги по ссылке ниже для аутентификации с использованием OAuth 2.0.

https://developers.google.com/identity/protocols/OAuth2ServiceAccount#overview

Теперь, согласно документации Google, необходимо выполнить три шага.

  1. Создайте JSON Web Token (JWT, произносится «jot»), который включает в себя заголовок, набор утверждений и подпись.
  2. Запросите токен доступа с сервера авторизации Google OAuth 2.0.
  3. Обработайте ответ JSON, который возвращает Сервер авторизации.

Я уже успел сгенерировать JWT, как на первом этапе. Однако когда я запросил токен доступа, я получил пустой ответ.

Поэтому я попытался отправить запрос токена с помощью консоли rest, чтобы проверить только результат запроса post. Ответ, который я получил, был: 500 Внутренняя ошибка.

Ниже мой код

    $jwt_claim = '{
"iss":"myemail.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/prediction",
"aud":"https://accounts.google.com/o/oauth2/token",
"exp":1328554385,
"iat":1328550785
}';

if (!$cert_store = file_get_contents(base_url('assets').'/myprivatekey.p12')) {
echo "Error: Unable to read the cert file\n";
exit;
}

$cert_info = array();
if (!openssl_pkcs12_read($cert_store, $cert_info, "notasecret")){
echo "Error: Unable to read the cert store.\n";
exit;
}

echo "Certificate Information Generated Succesfully<br>";
//print_r($cert_info['pkey']);

$sign = JWT::encode($jwt_claim,$cert_info['pkey'],'RS256');
echo 'Signature <br>';
echo $sign;

//2. Access token request
// Get cURL resource
$curl = curl_init();

// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
'grant_type' => urlencode('urn:ietf:params:oauth:grant-type:jwt-bearer'),
'assertion' => $sign
)
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);

echo '<br>response <br/>';
echo $resp;

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]