node.js - 如何从 google Passport 检索、保存和更新 idToken
问题描述
我在我的 nodejs 应用程序中使用 google oauth 护照策略,但我不知道存储和更新我的 idToken 的正确方法,因此我可以在对外部 api 进行 api 调用时将其用于身份验证。目前,我正在将令牌写入文本文件并从那里读取。我觉得这是一个坏主意,只需要关于如何以更优雅的方式做到这一点的建议。
module.exports = function (passport) {
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: url },
async (accessToken, refreshToken, params, profile, done) => {
const idToken = params.id_token
fs.writeFile('token.txt', idToken, err => {
if (err) {
console.error(err)
return
}
//file written successfully
console.log("file written successfully")
})
}
解决方案
正如另一位发帖人所指出的,如果您只是将令牌用于登录,您可能根本不需要存储和更新 ID 令牌。
但是,如果您使用令牌访问 Google API,并且即使没有用户在场,您也需要访问,最常见的方法是:
- 将加密的访问令牌和刷新令牌存储在数据库中,两者都与用户相关联
- 使用访问令牌时,请检查来自 Google 的指示令牌已过期的错误响应,使用刷新令牌获取新的访问令牌,并将新的访问令牌保存在您的数据库中(再次加密)
在 Google 的情况下,请务必传递access_type=offline
参数以检索刷新令牌。此外,如果这是您之前授权的用户,您需要通过prompt=consent
,否则 Google 不会发出刷新令牌。
实现上述所有内容的另一种方法是使用我工作的Xkit 之类的托管 OAuth 服务。它处理存储、加密和刷新令牌,以及所有特定于提供商的细微差别。同样,仅在您使用令牌访问 API(而不是用于登录)的情况下才有用,但需要考虑另一种选择。
推荐阅读
- javascript - Then() 在 React 中的调度操作之后不起作用
- bash - 执行命令后调试慢速 bash
- flutter - 使用 Cloud Firestore REST API 如何使用带有 http.post() 方法的 http 包发送数据
- r - R中并排的两个饼图
- angular - Searchable select options
- java - Android SwipeRefreshLayout 返回 null
- flutter - 你应该注入一个接口还是它的实现?
- node.js - code: 'ECONNRESET' failed, reason: socket hang up 0|server | at ClientRequest.
... nextjs - javascript - Scroll Text in Jquery Autocomplete
- authentication - Keycloak 不刷新令牌