Инструментарий идентификации Google: проверка JWT не удалась со статусом 500, сообщение: null

Согласно руководству по внедрению и здравому смыслу, я хотел бы проверить токен 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-fu обнаружился только при выходе из системы и обратно, но неудивительно, что это не решило проблему.
Еще одна проблема заключается в необходимости получения отображаемого имени пользователя и образ, через ту же проверяющую сторону.

Код

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);

person Lava Click    schedule 21.03.2016    source источник
comment
Кстати, я пробовал отправлять данные не в виде массивов, а в виде простых строк, но это ничего не изменило.   -  person Lava Click    schedule 21.03.2016


Ответы (1)


Чтобы проверить токен JWT Google Identity Toolkit, вам не нужно делать какие-либо HTTP-запросы. Рекомендуется использовать одну из библиотек Google Identity Toolkit (Java/Python/Php/ Ruby/Go/Nodejs), чтобы сделать это локально. Токен уже включает адрес электронной почты/имя/фото_url пользователя.

person Jin Liu    schedule 23.03.2016