Я пытаюсь использовать GoogleAPI для загрузки изображений на диск (который принадлежит одному аккаунту).
Поэтому я использую приложение сервер-сервер и пытаюсь выполнить шаги по ссылке ниже для аутентификации с использованием OAuth 2.0.
https://developers.google.com/identity/protocols/OAuth2ServiceAccount#overview
Теперь, согласно документации Google, необходимо выполнить три шага.
Я уже успел сгенерировать 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;
Задача ещё не решена.
Других решений пока нет …