Согласно руководство по внедрению и здравый смысл, я хотел бы проверить токен JWT, выданный пользователю, который вошел на мой сайт через Google Identity Toolkit, чтобы предотвратить подделку и … на всякий случай.
Запрос POST через cURL (код ниже) на https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo, содержащий idToken (строку), localId (список) и электронную почту (список), должен быть достаточным. Мое приложение использует в качестве локального идентификатора tokenId, выданный IDSP.
Тем не менее, это то, что я получаю:
Error: call to URL https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=MyAPIKey failed with status 500, response { "error": { "code": 500, "message": null } } , curl_error , curl_errno 0
И, честно говоря, я в полном недоумении: мой Google-фу только вышел из системы и снова вошел, но неудивительно, что это не решило проблему.
Еще одной проблемой является необходимость извлечения отображаемого имени пользователя и изображения через одну и ту же доверяющую сторону.
function verifytoken($data){
$url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=MyAPIKey";
var_dump($data);
$content = json_encode($data);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ( $status != 201 ) {
die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}
curl_close($curl);
$response = json_decode($json_response, true);
var_dump($response);
}
$tok=array('idToken'=>$gitkitUser->getUserId(),'localId'=>array($gitkitUser->getUserId()),'email'=>array($gitkitUser->getEmail()));
verifytoken($tok);
Чтобы проверить токен JWT Google Identity Toolkit, вам не нужно отправлять HTTP-запросы. Рекомендуется использовать один из Библиотеки Google Identity Toolkit (Java / Python / Php / Ruby / Go / Nodejs), чтобы сделать это локально. Маркер уже включает в себя адрес электронной почты / имя / photo_url пользователя.
Других решений пока нет …