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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...