express - 使用 Passport 检索和存储 access_token
问题描述
我在我的 Express 服务器中使用 PassportJS 进行身份验证。我正在使用“使用 Passport”作为起点,我目前能够成功进行身份验证。由于我需要通过服务器代理的 API 的访问令牌,因此我选择使用以下代码将访问令牌保存在我的用户会话中:openid-client
cookie-session
openid-client
passport.use(
'oidc',
new Strategy(
{ client, params, passReqToCallback, sessionKey, usePKCE },
(req, tokenset, userinfo, done) => {
logger.info('Retrieved tokenset & userinfo');
// Attach tokens to the stored userinfo.
userinfo.tokenset = tokenset;
return done(null, userinfo);
}
)
);
我的下一步是获取并存储一个新的访问令牌。附带的部分信息tokenset
是expires_at
密钥,它会在一小时内到期。所以当然,如果它接近到期或已经到期,我想获得一个新的令牌。
文档说要使用:
client.refresh(refreshToken) // => Promise
.then(function (tokenSet) {
console.log('refreshed and validated tokens %j', tokenSet);
console.log('refreshed id_token claims %j', tokenSet.claims);
});
好的,我明白这一点,而且我的代码也能正常工作。但我不知道如何将其保存回我的用户会话中。如果我通过我的服务器进行代理的后续 API 调用,我仍然会在req.session.passport.user.tokenset.access_token
. 那么我该如何更新呢?
(我可能应该提醒一下,我对 OpenID / Oauth 身份验证以及 Passport 本身还是很陌生,所以我正在做的一些事情可能是完全显而易见的。)
解决方案
推荐阅读
- oracle - 使用卷时,将文件从 url 添加到 docker 图像以不同的结果结束
- docker - 如何在 gitlab ci/cd 中不使用“docker build/daemon”命令为 vue.js 应用程序构建 docker 映像?
- python-3.x - 为什么花基本身份验证总是弹出登录表单
- android - 如何删除 TabLayout 工具提示?
- python - 带有附加键的字典理解
- python - PyOpenGL glDeleteBuffers 和 glDeleteVertexArrays 产生错误
- tabs - 添加 Buddypress 选项卡以显示成员(添加朋友选项卡)
- ios - 收到推送通知时,ReactNative 应用程序可能会在后台振动,但本机 iOS 应用程序(Swift)无法在后台振动
- python-3.x - 有没有办法提高 KivyMD MDDatatable 的效率?
- python - 如何确保反应来自用户而不是机器人本人?