我正在测试 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
当用户进行身份验证时,库会获取 token 并将其传递到服务器,如下所述:
https://developers.google.com/identity/sign-in/web/backend-auth
在服务器端(nodejs),使用此函数验证 token :
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 前端从 google 获取身份验证 token ,所以我使用 CLIENT_ID 服务器端进行 token 验证。我认为可以使用仅在服务器端已知的 client_secret (即 SECRET)来验证 token ,这样获得 token 的其他人就无法验证该用户。 我错过了什么?
最佳答案
看来您创建的客户端是公共(public)客户端,客户端 key 在私有(private)客户端中使用。
编辑:很抱歉我使用了术语“私有(private)客户端”而不是“ secret 客户端”。 基本上我们在 Oauth2 中有 2 种类型的客户端
公共(public)客户端:- 这些客户端不需要客户端 key 。
私有(private)客户端:- 这些客户端拥有客户端 key 。
我无法给你一个非常确定的答案,为什么你看不到你的客户端 secret ,因为我之前没有使用过这些特定的库,但是 在我看来,您可能创建了一个公共(public)客户端而不是 secret 客户端。
关于node.js - 为什么谷歌Oauth verifyIdToken(javascript nodejs版本)不使用客户端 secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41304745/