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 и т. д.