返回 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)req.body.state
认证中间件验证来自Azure AD B2C的认证响应后获取参数:
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”参数值应加密,这意味着req.body.state
如果您不希望返回 URL 被篡改,则必须解密该参数。
否则,通常在身份验证中间件重定向并将身份验证请求发送到 Azure AD B2C 之前写入返回 URL,然后在身份验证中间件接收并验证来自 Azure 的身份验证响应后req.session
读取(然后删除)此返回 URLreq.session
广告 B2C。