Использование состояния /customState с помощью passport-azure-ad

У меня проблемы с выяснением цели customState и если / как я могу использовать его для передачи данных в обратный URL. В частности, я хочу направить пользователя обратно в исходное местоположение после входа в систему. Я думал, что смогу передать исходный URL-адрес параметру customState и вернуть его мне обратно в обратном URL POST, но, похоже, он закодирован или, возможно, заменен другим значением.

Вот чего я хочу добиться:

  1. Анонимные посещения пользователей /page/protected который требует аутентификации.
  2. Кодовые звонки passport.authenticate который в свою очередь перенаправляет пользователя для входа.
  3. Пользователь входит в систему и возвращается к предварительно настроенному URL-адресу возврата, например: /auth/oidc/return,
  4. Код обрабатывает извлечение информации из данных формы.
  5. Пользователь направлен обратно на /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.

Другие вопросы по тегам