Как правильно проверить целостность токена Google?


Я пытаюсь безопасно войти в систему пользователя через его аккаунт Google. Я нахожусь на стадии, когда я получаю userID и oAuthToken, используяЭтот плагин cordova.

Теперь я нахожусь в точке, где мне нужно отправить эти учетные данные на мой сервер,а затем на стороне сервера проверить целостность маркера. По существу, я пытаюсь выполнить Эту часть процесса.

Я не знаю, какой токен я должен попытаться проверить с помощью api клиента Google. Должен ли я использовать юзерид или оауттокен ?

В документации упоминается проверка идентификатора пользователя, но я нахожу это странным. Не означает ли это, что если кто-то получит мой идентификатор пользователя, он сможет по существу взломать мой сервер ? Идентификатор пользователя никогда не меняется (поправьте меня, если я ошибаюсь здесь), поэтому кажется небезопасным проверять это. Не будет ли более разумным проверить oAuthToken, срок действия которого истекает ? Или срок действия идентификатора пользователя также истекает ?

Любые советы будут приветствоваться.

Спасибо,

Фидо

Редактировать:

Для всех, кто заинтересован. Моя путаница возникла из-за не полного понимания трех маркеров которых API Google может вернуться: идентификатор пользователя, oAuthToken, и сведения об идентификаторе маркера. Вкратце: userId возвращается с большинством вызовов api, идентифицирующих пользователя. Это кажется постоянным. OAuthToken в моем случае был возвращен, когда я получил доступ к api google в качестве клиента Android. TokenId возвращается при обращении к api в качестве веб-клиента. Так что те, кто хочет сделать проверку на стороне сервера с помощью мобильного извлекать токен доступа к API как веб-клиент. Возвращенный токен может быть проверен на стороне сервера с помощью кода, аналогичного принятому ниже ответу.

1 6

1 ответ:

Нужно проверить сведения об идентификаторе маркера, не послать имя пользователя по открытой линии. Идтокен быстро истекает, и он практически неприступен для атак подражания грубой силе.

Этот фрагмент php получает HTTP-запрос, который начинается с idtoken=, проверяет ваш токен на стороне сервера и возвращает либо полный массив, либо адрес электронной почты пользователя:

<?php
$inputRaw =  file_get_contents('php://input');
$idToken= substr($inputRaw,8);
$fp = fopen('twoStepOutput.txt', 'a');

$url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token='.$idToken;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$json = json_decode($response, true);
curl_close($ch);

$userEmail = $json["email"];
$clientId = $json["azp"];
//fwrite($fp, date("YmdHis")."\r\n$idToken\r\n");
fwrite($fp, date("YmdHis")."\r\n");
fwrite($fp, "email Confirmed by GOOGLE:[$userEmail]\r\n");
//print_r($json); // returns array console readable
print_r($clientId); // returns google client id for verification (without transfering user data)
fclose($fp);
?>

Только в случае, если вы в сомнениях, что сведения об идентификаторе маркера выглядит следующим образом:

eypZCI6OiJSUzI1JhbGciNiIsImtIjk4MzQxMzgyMWJmMzhiNTJlM4OTI2YTllMTc0YTc5MWMwNGMifQ.eyJpc3MiOi3VizExYJhY2NvdW50cy5nb29nbGUuY29tIiwicmEIjoiMTAzNDUyNjAwODM5NzY3MjU2MDE0IiwiYXpwIjoiMTA3OTMxMTEyNTc1OS1lYWJhbWV0b2ZldjIwY28zbGQ5b2o1YWQwMzFuZG9nMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImVtYWlsIjoidG9ueWdpbGJyQGdtYWlsLmNvbSIsImF0X2hhc2giOiJaSkhxbUZHcnR5Y29kdEhhOGJvMEYWY1NTk2NzUsImV4cCVBIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjEwNzkzMTExMjU3NTkt1ldG9mZXYyMGNvM2xkOW9qNWFkMDMxbmRvZzAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJpYXQiOjE0MzZWFiI6MTQzNjU2MzI3NSwibmFtZSI6IlRvbnkgR2lsIiwicGljdHVyZSI6Imh0dHBzOi8vbGg0Lmdvb2dsZXVzZXJjb250ZW50LmNvbS8tQVREckRSbF9UdFEvQUFBQUFBQUFBQUkvQUFBQUFBQUFBRncvOVdDQnZkYlpUTEEvczk2LWMvcGhvdG8uanBnIiwiZ2l2ZW5fbmFtZSI6IlRvbnkiLCJmYW1pbHlfbmFtZSI6IkdpbCIsImxvY2FsZSI6ImVuIn0.L4peW11TD0bDOlvYKNY60ieZ1sbZfW9gEImcuxVA5f9U_4N49Io1CFXoGKmEPR_ij4q38tF2drPMOKijQePwlrxDui37ubzAdVkuksCJUobzjD1_eccF_8GldP5Y1_XsU8xrZeEnfabfiYpr-VwoLzIeNNUdy9SUbUWjMHNcvf4dGFMzE_SONHr57igjHK3rGkbvLo-UduFngm3e-EL0YR2zOKOVj1Qs8g8_qpWgkn8XABTme1thmuU8OfC-HaF9_B2Zk2UCsnOu4ApiYZk3DPIKgeX6AF11kYnzgvciYheWeddly0foT4G00C7w_wgtd-LSRw0XZltec_MPMa2QSA