我正在使用 NodeJS 为 Web 应用程序开发 MVP。我使用 gmail/google API 进行身份验证和登录。我已经设置了登录和 OAuth2.0 并且它正在工作。但是,文档中有一部分我不确定。这是我参考的文档
https://github.com/googleapis/google-api-nodejs-client
特别是“处理刷新令牌”部分。
它说我应该监听新的refresh_tokens的令牌事件并将新的refresh_token存储在数据库中
oauth2Client.on('tokens', (tokens) => {
if (tokens.refresh_token) {
// store the refresh_token in my database!
console.log(tokens.refresh_token);
}
console.log(tokens.access_token);
});
我不明白的是你怎么知道哪个refresh_token是针对哪个用户的?您是否必须在此过程的早期关联唯一标识符,然后在事件发生时检查标识符?
是的,如果要将其存储在数据库中,您需要创建一个唯一标识符并将其作为值映射到刷新令牌(建议这样做)。
请记住,刷新令牌会授予另一个访问令牌,而不需要用户进行身份验证。这意味着如果您将刷新令牌与其他用户的请求一起使用,则您将授予其他用户访问权限!
创建唯一标识符的常见方法是使用会话令牌或会话 ID 作为唯一标识符。您可以将其用作映射到数据库中刷新令牌的键。 请参阅此处了解一些说明和注意事项: OWASP 会话管理备忘单
您还需要考虑如何存储该唯一标识符。因此您知道何时在正确的时间使用关联的刷新令牌。这取决于您的用例,但如果您使用它来避免要求用户重新进行身份验证,则通常会安全地存储在 cookie 中。因此,下次用户重新访问您的应用程序时,您可以检查 cookie 并在数据库中查找唯一标识符。
如果您正在做一些事情,例如在用户不在场时为他们运行某种自动化,那么它看起来会有所不同。加密用户的电子邮件或您使用的任何标识符是一种方法。使用其结果作为密钥/会话令牌。当然,这是一个简化的视图,但它给了你一个想法。