如何验证 Google 身份服务器端
How to validate Google identity server side
我有一个使用纯客户端 Google API 进行身份验证并可能在圈子中列出联系人的应用程序。但是,我将提交给服务器的某些数据与身份相关联。我究竟应该做什么来验证提交到我的服务器的身份(我有一个 REST api)实际上是一个经过身份验证的身份而不是伪造的?有没有不用从服务器端进行 API 调用就可以做到这一点的好方法?
我不是很担心这个应用程序的安全性,但我想避免做任何极其愚蠢的事情。
您可以将从Google获得的ID令牌传递给服务器端。这是一个可以在本地验证的 JSON Web 令牌。除了正常的 JWT iss
/exp
/iat
和签名验证之外,您还要特别注意检查 audience
声明以查看它是否真的发给了您的客户.
提问者编辑:
查看链接的文章后,我得到了以下代码,用于检索与 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);
?>
我有一个使用纯客户端 Google API 进行身份验证并可能在圈子中列出联系人的应用程序。但是,我将提交给服务器的某些数据与身份相关联。我究竟应该做什么来验证提交到我的服务器的身份(我有一个 REST api)实际上是一个经过身份验证的身份而不是伪造的?有没有不用从服务器端进行 API 调用就可以做到这一点的好方法?
我不是很担心这个应用程序的安全性,但我想避免做任何极其愚蠢的事情。
您可以将从Google获得的ID令牌传递给服务器端。这是一个可以在本地验证的 JSON Web 令牌。除了正常的 JWT iss
/exp
/iat
和签名验证之外,您还要特别注意检查 audience
声明以查看它是否真的发给了您的客户.
提问者编辑: 查看链接的文章后,我得到了以下代码,用于检索与 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);
?>