Как правильно проверить целостность токена Google?
Я пытаюсь безопасно войти в систему пользователя через его аккаунт Google. Я нахожусь на стадии, когда я получаю userID и oAuthToken, используяЭтот плагин cordova.
Теперь я нахожусь в точке, где мне нужно отправить эти учетные данные на мой сервер,а затем на стороне сервера проверить целостность маркера. По существу, я пытаюсь выполнить Эту часть процесса.
Я не знаю, какой токен я должен попытаться проверить с помощью api клиента Google. Должен ли я использовать юзерид или оауттокен ?
В документации упоминается проверка идентификатора пользователя, но я нахожу это странным. Не означает ли это, что если кто-то получит мой идентификатор пользователя, он сможет по существу взломать мой сервер ? Идентификатор пользователя никогда не меняется (поправьте меня, если я ошибаюсь здесь), поэтому кажется небезопасным проверять это. Не будет ли более разумным проверить oAuthToken, срок действия которого истекает ? Или срок действия идентификатора пользователя также истекает ?
Любые советы будут приветствоваться.
Спасибо,
Фидо
Редактировать:
Для всех, кто заинтересован. Моя путаница возникла из-за не полного понимания трех маркеров которых API Google может вернуться: идентификатор пользователя, oAuthToken, и сведения об идентификаторе маркера. Вкратце: userId возвращается с большинством вызовов api, идентифицирующих пользователя. Это кажется постоянным. OAuthToken в моем случае был возвращен, когда я получил доступ к api google в качестве клиента Android. TokenId возвращается при обращении к api в качестве веб-клиента. Так что те, кто хочет сделать проверку на стороне сервера с помощью мобильного извлекать токен доступа к API как веб-клиент. Возвращенный токен может быть проверен на стороне сервера с помощью кода, аналогичного принятому ниже ответу.
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