【发布时间】:2017-05-09 08:30:07
【问题描述】:
我正在为 SPA js+nodejs 应用程序测试 google singin。 我已经添加了这个:
<script src="https://apis.google.com/js/platform.js" async defer></script>
还有这些:
<meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
<div class="g-signin2" data-onsuccess="onSignIn"></div>
在 html5/js 客户端。 遵循本指南:
https://developers.google.com/identity/sign-in/web/sign-in
当用户进行身份验证时,库获取令牌并将其传递给服务器,如下所述:
https://developers.google.com/identity/sign-in/web/backend-auth
在服务器端(nodejs)使用此函数验证令牌:
client.verifyIdToken(
token,
CLIENT_ID,
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3],
function(e, login) {
var payload = login.getPayload();
var userid = payload['sub'];
// If request specified a G Suite domain:
//var domain = payload['hd'];
});
我的问题是:client_secret 什么时候使用?因为我使用 CLIENT_ID 前端从谷歌获取身份验证令牌,所以我使用 CLIENT_ID 服务器端进行令牌验证。我认为可以使用仅在服务器端知道的 client_secret(即 SECRET)验证令牌,以便获取令牌的其他人无法验证该用户。 我错过了什么?
【问题讨论】:
-
客户端密码仅在您从后端服务器请求访问来自 Google 的其他数据时使用,例如离线访问用户的联系人、日历或云端硬盘数据。服务器使用该密钥从客户端应用程序交换身份验证代码以获取访问令牌以检索经过身份验证的数据。在您的情况下,听起来您只是将包含在 ID 令牌(签名的 JWT)中的基本用户数据传递到您的服务器以验证用户的身份。如果您不需要从服务器访问任何经过身份验证的 Google 资源,则不需要访问令牌,也不需要密钥。
-
这里是解释仅身份验证用例的博客文章:android-developers.googleblog.com/2016/01/… 和 API 访问用例的授权:android-developers.googleblog.com/2016/02/…
标签: node.js google-oauth google-signin google-api-nodejs-client