我现在做的是:
.credentials字符串发送到我的服务器。OAuth2Client.verifyIdtoken方法,该方法返回用户的电子邮件地址(除其他外),我的服务器使用该地址来验证用户并创建会话。一切正常,但我想知道是否有任何安全问题,我错过了。特别是有一个nonce字段。docs (链接)并不解释如何使用它。
注意:我使用的是“与谷歌签约”,而不是不推荐的"Google登录“。
编辑:我熟悉非the的概念,并在自己执行OAuth 2服务器端流时使用了它们。我不明白的是,Google登录时期望我在上面的流中使用它的nonce参数,在这里,我同时使用他们的客户端和服务器端SDK。
发布于 2021-09-23 00:58:30
非CSRF是一种预防CSRF的方法.当您向Google提出请求时,您将包含一个nonce,并且当身份验证完成时,Google将返回相同的nonce。这种方法的神奇之处在于,如果现在与您发送的内容不匹配,那么您可以忽略响应,因为它可能是被欺骗的。
了解更多关于CSRF的信息,这里是:https://owasp.org/www-community/attacks/csrf
非are通常是低温安全的随机字符串/字节。
我使用crypto-random-string作为基础来生成非use,但是任何具有此功能的包都应该足够了。
有时,我用Redis中的TTL存储非can,但有时我使用附加于请求的ID来存储非can,以便以后验证它。
我告诉你这件事,因为我花了很长时间才弄明白这件事:
发布于 2022-04-25 13:04:30
使用来自谷歌网站(https://developers.google.com/identity/one-tap/android/idtoken-auth)的示例,我添加了当前的代码:
const nonce = '...'; // Supplied by client in addition to token
const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
async function verify() {
const ticket = await client.verifyIdToken({
idToken: token,
audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
});
const payload = ticket.getPayload();
const serverNonce = payload['nonce'];
if (nonce != serverNonce) {
// Return an error
}
const userid = payload['sub'];
// If request specified a G Suite domain:
// const domain = payload['hd'];
}
verify().catch(console.error);https://stackoverflow.com/questions/69292771
复制相似问题