gpt4 book ai didi

node.js - 将 state/customState 与 Passport-azure-ad 结合使用

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:00 25 4
gpt4 key购买 nike

我无法弄清楚 customState 的用途以及是否/如何利用它将数据传递到返回网址。具体来说,我希望在登录后将用户路由回其原始位置。我想我可以将原始 url 传递给参数 customState 并在返回 url 中将其返回给我POST,但它似乎已被编码或可能被不同的值替换。

这是我想要实现的目标:

  1. 匿名用户访问需要身份验证的 /page/protected
  2. 代码调用 passport.authenticate,进而重定向用户进行登录。
  3. 用户登录并返回到预先配置的返回网址,例如:/auth/oidc/return
  4. 代码处理从表单发布数据中提取信息。
  5. 用户被引导回 /page/protected

最佳答案

返回 URL(例如“/page/protected”)可以通过以下方式往返:

1) 在身份验证中间件重定向到 Azure AD B2C 之前设置“customState”参数:

app.get('/login', function (req, res, next) {
passport.authenticate('azuread-openidconnect', {
response: res,
resourceURL: config.resourceURL,
customState: '/page/protected', // Or set to the current URL
failureRedirect: '/'
})(req, res, next);
}, function (req, res) {
res.redirect('/');
});

2) 在身份验证中间件验证来自 Azure AD B2C 的身份验证响应后获取 req.body.state 参数:

app.post('/auth/openid/return', function (req, res, next) {
passport.authenticate('azuread-openidconnect', {
response: res,
failureRedirect: '/'
})(req, res, next);
}, function (req, res) {
res.redirect(req.body.state);
});

“customState”参数值应加密,这意味着如果您不希望返回 URL 被篡改,则必须解密 req.body.state 参数。

否则,通常会在身份验证中间件将身份验证请求重定向并将其发送到 Azure AD B2C 之前将返回 URL 写入 req.session,然后在身份验证中间件接收并验证来自 Azure AD B2C 的身份验证响应后从 req.session 读取(然后删除)此返回 URL。

关于node.js - 将 state/customState 与 Passport-azure-ad 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com