내가 겪고있는 문제는이 사이트에서 여러 번 논의되었지만 대부분의 게시물은 상당히 오래된 내용입니다. 여기에 something similar이 있습니다. 내 IdP로 WSO2 IS 5.2를 사용 중이며 SSO에 참여하는 차이 서버에서 호스팅되는 2 개의 Java 기반 웹 응용 프로그램이 있습니다. 각 webapp (SP)는 Spring-SAML 확장을 구현했습니다. Single Sign-On은 완벽하게 작동하지만 Single Logout은 부분적으로 만 작동합니다. 다음은 테스트 케이스이다 : webapp1에WSO2 및 스프링 SAML 단일 로그 아웃 문제
- 액세스 보안 자원
- IDP (WSO2)에서 로그인 페이지 제시하고 사용자가 로그인 webapp2에
- 액세스 보안 리소스를 제시 webapp1에서
- 안전 자원에
- SAML 요청 IDP에 전송되어이 IDP 응답하여 제공되는 사용자 webapp2에서
- 시큐어 리소스를 인증 된 최종 SSO
- 에서 itiate 하나의 IDP에 (브라우저를 통해) SAML 요청을 보내 webapp2
- Webapp2에서 로그 아웃 및 SAML 응답은 가
- 사용자가 webapp2에 로컬로 로그 오프 및 IDP 세션이 IDP는 직접 webapp1에 로그 아웃 요청을 전송
- 을 종료 반환 (백 채널 형)
- 로그 아웃 요청 (로그 SamlStatusException를 나타냅니다 : 사용자가 로그인하지 않은) webapp1에 실패
그래서 최종 결과는 아직도 webapp1의 로컬 세션을 가지고있다. 주문을 변경하고 webapp1에서 SLO를 시작하면 webapp1이 로그 아웃되고 webapp2의 로컬 세션이 계속 존재하게됩니다. WSO2 서버는 SLO 중에 두 번째 세션 참가자를 확인할 수 있지만 Idp에서 두 번째 세션 참가자에게 전송 된 HTTP 요청에는 Spring 보안 컨텍스트가 없습니다. 이것은 stateless HTTP 요청이므로 로그인 한 사용자는 없을 것입니다. 이것이 내가 실패하고 있다고 생각하는 이유입니다.
나는 this 토론을 발견했다. 그것의 약 2 세. 이 문제에 새로운 점이 있습니까? 아마 WSO2 나 Spring-saml config에서 설정 단계를 놓친 것일 수 있습니다. 여기
내 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"/>
SP에서 일부 관련 스프링 SAML의 설정 :
<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>
안녕하세요 블라디미르, 나는 당신이 봄에 전문가라는 것을 알고 있습니다. 내 문제를 도와 줄 수있어? – bob9123