android – 如何正确验证Google令牌的完整性?

前端之家收集整理的这篇文章主要介绍了android – 如何正确验证Google令牌的完整性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试通过他们的Google帐户安全地登录用户.
我正处于使用 this cordova插件检索userID和oAuthToken的阶段.

现在,我需要将这些凭据发送到我的服务器,然后在服务器端验证令牌的完整性.基本上我正在尝试执行this部分流程.

我很困惑,我应该尝试使用Google客户端API验证哪个令牌.我应该使用userID还是oAuthToken?

文档提到验证用户ID,但我发现这很奇怪.这不意味着,如果有人获得我的用户ID,他们可以基本上闯入我的服务器?用户ID永远不会改变(如果我在这里错了,请纠正我)所以对此进行验证似乎不安全.验证设置为过期的oAuthToken是不是更有意义?或者用户ID是否也会过期?

任何的建议都受欢迎.

谢谢,

编辑:

对任何感兴趣的人由于不完全理解google api可以返回的三个令牌,我产生了混乱:userId,oAuthToken和idToken.
简而言之:返回userId,其中大多数api调用标识用户.这似乎是不变的.当我访问谷歌api作为Android客户端时,我的案例中的oAuthToken被返回.访问api作为Web客户端时返回tokenId.因此,那些希望使用移动检索令牌进行服务器端验证的人应该将api作为Web客户端访问.然后,返回的令牌可以使用类似于下面接受的答案的代码在服务器端验证.

解决方法

你需要验证IdToken,永远不要在开放的行上发送userId. IdToken迅速到期,它几乎无法用于暴力冒充攻击.

PHP片段接收以idtoken =开头的HTTP请求,验证您的令牌服务器端并返回完整的数组或用户电子邮件

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

万一你怀疑,这就是IdToken的样子:

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

猜你在找的Android相关文章