Keycloak, WSO2 и некоторые другие серверы IDO SSO предоставляют возможность «Single Logout», не заставляя браузер перенаправлять на каждый SP, где текущий пользователь входит в систему, отправив <LogoutRequest>
через HTTP- POST через обратный канал.Одиночный выход с использованием HTTP-POST через обратный канал
К сожалению, это не сработает, если интеграция единого входа в службу реализована с использованием spring-security-saml2-core библиотека (мы используем Keycloack).
Все, что я мог понять из файла журнала на стороне SP был:
[2016-01-13 12:50:56.867] [DEBUG] [org.springframework.security.saml.SAMLLogoutProcessingFilter] - Received logout request is invalid, responding with error
org.springframework.security.saml.SAMLStatusException: No user is logged in
at org.springframework.security.saml.websso.SingleLogoutProfileImpl.processLogoutRequest(SingleLogoutProfileImpl.java:168)
at org.springframework.security.saml.SAMLLogoutProcessingFilter.processLogout(SAMLLogoutProcessingFilter.java:176)
at org.springframework.security.saml.SAMLLogoutProcessingFilter.doFilter(SAMLLogoutProcessingFilter.java:102)
...
Приложение, которое использует расширение Spring SAML развернут на сервере Tomcat 7. Кажется, что <LogoutRequest>
при отправке через фоновым канал не имеет cookie сеанса браузера, и сеанс пользовательского приложения не может быть идентифицирован, поэтому пользователь не может быть выведен из системы, и сеанс приложения пользователя не будет аннулирован.
Однако <LogoutRequest>
содержит глобальный идентификатор сеанса единого входа, который может однозначно идентифицировать сеанс приложения. Но этого не происходит.
Это поведение библиотеки Spring SAML, предназначенное по дизайну: не поддерживает внутреннюю связь во время Single Logout? или я что-то упускаю, и желаемое поведение можно настроить?
Примечание: Я понимаю, что в соответствии со спецификацией SAML HTTP-POST и HTTP-Перенаправление привязок предназначены для переноситься с помощью агента пользователя (веб-браузер), однако широкая поддержка со стороны серверов IDP SSO заставило меня задать этот вопрос :)
Спасибо заранее!
ОБНОВЛЕНИЕ: Согласно комментарию Владимира Шефера в SES-162 ticket, это похоже на поведение библиотеки.