如何验证Google身份服务器端

时间:2015-02-01 04:19:40

标签: php security oauth-2.0 google-api

我有一个应用程序,它使用纯客户端Google API进行身份验证,并可能在圈子中列出联系人。但是,我将提交给服务器的某些数据与身份相关联。我应该做些什么来验证提交给我的服务器的身份(我有一个REST api)实际上是一个经过身份验证的身份而不是伪造的?如果没有从服务器端进行API调用,有没有一种好方法呢?

我对此应用程序中的安全性并不十分关注,但我想避免做任何非常愚蠢的事情。

1 个答案:

答案 0 :(得分:2)

您可以将从Google获得的ID令牌传递到服务器端。它是一个JSON Web令牌,您可以在本地进行验证。除了正常的JWT audience / iss / exp和签名验证之外,您还应特别注意检查iat声明是否确实已发布给您的客户

提问者编辑: 在查看链接文章后,我得到了以下代码,用于检索与JWT.php一起使用的密钥:

<?php
$refresh = false;
if (file_exists('oauthkey')) {
   $age = time() - filemtime('oauthkey');
   if ($age > 20000)
      $refresh = true;   
} else
   $refresh = true;

if ($refresh) {
   $oauthKey = file_get_contents('https://www.googleapis.com/oauth2/v1/certs')
      or die('Failed to retrieve google public key.');
   $keyFile = fopen('oauthkey', 'w') or die ('Failed to open public key file for writing.');
   fwrite($keyFile, $oauthKey);
   fclose($keyFile);
} else {
   $keyFile = fopen('oauthkey', 'r') or die ('Failed to open public key file for reading.');
   $oauthKey = fread($keyFile, 5000) or die ('Failed to read from public key file.');
   fclose($keyFile);   
}
$oauthKey = json_decode($oauthKey, true);
?>