IdentityServer4 endsession перенаправление на учетную запись / выход из системы 404

У меня IdentityServer4 работает в Azure по URL-адресу https, и я использую проект Angular CLI с библиотекой angular-oauth2-oidc для обработки неявного потока. Я пытаюсь настроить единый выход, но он работает неправильно.

Я зову logOut наOAuthService который был автоматически настроен (через документ Discovery) для использования URL выхода из системы на сервере аутентификации, т.е. https://my-id4-server.example.com/connect/endsession с параметрами строки запроса, содержащими token_hint и postLogoutUri,

По какой-то причине реальное поведение таково, что IdentityServer4 перенаправляет (302) браузер на URL https://my-id4-server.example.com/account/logout?logoutid=..., за что браузер получает 404. Кроме того, если я открою страницы IdentityServer на отдельной вкладке, я вижу, что мой сеанс еще жив.

Ожидаемое поведение заключается в том, что мой сеанс завершен, и я перенаправлен обратно в мой SPA.

На стороне ID4Server я настроил:

  • RedirectUris а также PostLogoutRedirectUris с http://localhost:4200 (где мой SPA работает в настоящее время), среди прочего;
  • AllowedGrantTypes установлен в Implicit
  • AllowedCorsOrigins также позволяет мой localhost SPA

Кроме того, я вижу endsession Конечная точка правильно настроена в .well-known Конечная точка конфигурации.

На стороне SPA я настроил issuer, redirectUri, clientId, а также scope, Вход с перенаправлением назад работает просто отлично.


Итог: что не так, если endsession конечная точка перенаправляет на account/logout который в свою очередь дает 404?

2 ответа

Решение

Проблема заключалась в том, что действие контроллера для Logout(...)отсутствовал на стороне IdentityServer вещей. Если у вас их нет, но есть все остальное, вы получите такое поведение.

Я предполагаю, что account/logout это перенаправление по умолчанию для этого потока, и вам нужно либо изменить его на свой фактический URL для выхода из системы в настройках IDS4, либо просто реализовать эту конечную точку.

По замыслу IDS4 контролирует вас после того, как конечная точка завершена. Вы прошли logoutid Параметр, который затем можно использовать в сочетании с IIdentityServerInteractionService, чтобы получить информацию о запросе на окончание сеанса и предпринять необходимые действия - например, запрос подтверждения, загрузку iframe выхода из фронтального канала, обработку выхода из внешнего IDP и т. д.

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