2016-01-13 6 views
0

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, это похоже на поведение библиотеки.

ответ

0

Нет, не представляется возможным осуществлять <LogoutRequest> через HTTP-POST через обратный канал, используя библиотеку Spring-SAML.

Это поведение противоречит спецификации SAML, и, согласно комментарию Владимира Шефера, в SES-162 ticket он не будет поддерживаться Spring-SAML.

Связывание SOAP предназначено для бэкэнд-канала, но, как отмечено @meetarun, оно не реализовано в библиотеке Spring-SAML на данный момент.

2

В Spring-SAML Single Logout в настоящее время поддерживается связыванием HTTP-Redirect и HTTP-POST. Связывание SOAP недоступно. См: Spring SAML Global Logout

Назад канал не поддерживается весной-SAML

Смежные вопросы