我正处于使用 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客户端访问.然后,返回的令牌可以使用类似于下面接受的答案的代码在服务器端验证.
解决方法
此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