2017-01-25 19 views
0

Проблема, с которой я сталкиваюсь, обсуждалась несколько раз на этом сайте, однако большинство сообщений довольно старые. Вот something similar к тому, что я испытываю. Я использую WSO2 IS 5.2 в качестве моего IdP, и у меня есть 2 веб-приложения на основе Java, размещенные на разностных серверах, которые участвуют в SSO. Каждый webapp (SP) реализовал расширение Spring-SAML. Single Sign-on работает отлично, но Single Logout работает только частично. Вот тестовый пример:Вопрос о выпуске WSO2 и Spring SAML

  1. Доступ к защищенному ресурсов на webapp1
  2. Войти Страница из IDP (WSO2) представлен и пользователь входит в систему
  3. Secure ресурса из webapp1 представлен
  4. доступа к защищенному ресурсу на webapp2 запрос
  5. SAML отправляется IDP, IDP отвечает и проверка подлинности пользователя
  6. Secure ресурса из webapp2 представлен, конец SSO
  7. в itiate одного отключиться от webapp2
  8. webapp2 отправить SAML запроса (через браузер) к IDP и ответ SAML возвращаются
  9. Пользователь вышел локально на webapp2 и IDP сеанс завершается
  10. МВА, непосредственно отправляет запрос выхода из системы webapp1 (тип обратного канала)
  11. запрос Выход не в webapp1 (журнал указывают SamlStatusException: ни один пользователь не вошел в систему)

Таким образом, конечный результат в том, что я до сих пор локальный сеанс на webapp1. Если я изменю порядок и инициирую SLO из webapp1, то будет выходить webapp1, и локальная сессия webapp2 будет продолжать существовать. Сервер WSO2 может определить участника второго сеанса во время SLO, однако HTTP-запрос, отправленный из Idp на участника 2-го сеанса, не имеет контекста безопасности Spring. Это был бы HTTP-запрос без учета состояния, чтобы не было зарегистрированного пользователя. Вот почему я считаю, что он терпит неудачу.

Я нашел this обсуждение. Его около 2 лет. Есть что-то новое в этом вопросе? Возможно, шаг конфигурации пропустил меня на WSO2 или в конфигурации Spring-saml.

Вот соответствующая часть моих метаданных SP:

<md:SingleLogoutService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/> 
<md:SingleLogoutService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"/> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat> 
<md:AssertionConsumerService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/> 
<md:AssertionConsumerService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/> 

Некоторой соответствующие Спринг-SAML конфигурация на SP:

<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter"> 
<constructor-arg> 
    <bean class="org.springframework.security.saml.metadata.MetadataGenerator"> 
    <property name="entityId" value="urn:webapp1:mycity"/> 
    <property name="entityBaseURL" value="https://wwwdev04.domain.org:443/webapp" /> 
    <property name="extendedMetadata"> 
     <bean class="org.springframework.security.saml.metadata.ExtendedMetadata"> 
     <!-- <property name="signMetadata" value="false"/> --> 
     <property name="idpDiscoveryEnabled" value="false"/> 
     </bean> 
    </property> 
    </bean> 
</constructor-arg> 
</bean> 

ответ

1

WSO2 не реализует спецификацию SAML 2.0 правильно. Спецификация требует, чтобы Single Logout с привязками HTTP- * выполнялся с использованием интерфейсного канала (= через браузер пользователя) - что делает сеанс HTTP доступным и позволяет Spring SAML правильно его завершать. Я считаю, что этот вопрос никогда не был зафиксирован на WSO2.

Spring SAML по умолчанию использует HttpSession для хранения пользовательского состояния. Это также является причиной того, что Spring SAML не поддерживает Single Logout с привязкой SOAP из коробки. Было бы возможно внедрить хранилище Spring Security на уровне приложений, которое может быть недействительным независимо от HttpSession (и, следовательно, обходиться ограничением WSO2), но по умолчанию оно не настроено (и я никогда не пробовал его).

+0

Привет, Владимир, я вижу, что вы весной эксперт. Не могли бы вы помочь мне с моей проблемой? – bob9123