Использование состояния /customState с помощью passport-azure-ad
У меня проблемы с выяснением цели customState
и если / как я могу использовать его для передачи данных в обратный URL. В частности, я хочу направить пользователя обратно в исходное местоположение после входа в систему. Я думал, что смогу передать исходный URL-адрес параметру customState
и вернуть его мне обратно в обратном URL POST
, но, похоже, он закодирован или, возможно, заменен другим значением.
Вот чего я хочу добиться:
- Анонимные посещения пользователей
/page/protected
который требует аутентификации. - Кодовые звонки
passport.authenticate
который в свою очередь перенаправляет пользователя для входа. - Пользователь входит в систему и возвращается к предварительно настроенному URL-адресу возврата, например:
/auth/oidc/return
, - Код обрабатывает извлечение информации из данных формы.
- Пользователь направлен обратно на
/page/protected
,
1 ответ
Обратный URL-адрес (например, "/page/protected") может быть возвращен путем:
1) Установка параметра "customState" перед перенаправлением промежуточного программного обеспечения для проверки подлинности в Azure AD B2C:
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 был подделан.
В противном случае, обычно пишется обратный URL req.session
перед промежуточным программным обеспечением для проверки подлинности перенаправляет и отправляет запрос проверки подлинности в Azure AD B2C, а затем считывает (а затем удаляет) этот URL-адрес возврата из req.session
после того, как промежуточное ПО аутентификации получит и подтвердит ответ аутентификации от Azure AD B2C.