IdentityServer4 endsession перенаправление на учетную запись / выход из системы 404 - PullRequest
0 голосов
/ 30 апреля 2018

У меня 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 * 1020. *. Кроме того, если я открою страницы IdentityServer на отдельной вкладке, я увижу, что мой сеанс еще жив.

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

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

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

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

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


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

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

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

0 голосов
/ 01 мая 2018

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

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

...