我使用 Spring SAML扩展程序和 PingFederate 作为IDP服务器。现在,当我从SP(服务提供商)发起全局logou 时,它只会使SP会话无效而不是IDP服务器会话。即使在全局注销后,当我再次尝试登录时(使用SP启动),它也允许直接登录而无需询问用户登录凭据。
我注意到在SAML中,单个注销请求 relayState 参数丢失,尽管其他SP应用程序中的工作正常(PingFederate提供的演示SP应用程序)。我尝试在securityContext.xml文件中添加relayState属性(请参阅下面的代码段)但仍然是relayState不是注销请求参数的一部分。
<bean id="samlEntryPoint" class="org.springframework.security.saml.SAMLEntryPoint">
<property name="defaultProfileOptions">
<bean class="org.springframework.security.saml.websso.WebSSOProfileOptions">
<property name="relayState" value="http://192.168.1.73:8080/adeptia"/>
<property name="includeScoping" value="true"/>
</bean>
</property>
</bean>
请告诉我relayState参数的用途是什么,可能的值是什么以及如何将其包含在SAML注销请求中。
答案 0 :(得分:1)
您应该能够通过扩展SingleLogoutProfileImpl
- 方法sendLogoutRequest
来传递中继状态。你可以调用context.setRelayState()
来获取值,然后调用super来完成其余的逻辑。
在响应阶段,继电器值将在processLogoutResponse
中再次出现在上下文对象中。
在Spring SAML的Single Logout期间,没有明确的发送中继功能。