如何使用Spring SAML扩展在SAML单一注销请求中包含relayState参数

时间:2016-11-30 09:31:53

标签: java spring-saml pingfederate

我使用 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注销请求中。

1 个答案:

答案 0 :(得分:1)

您应该能够通过扩展SingleLogoutProfileImpl - 方法sendLogoutRequest来传递中继状态。你可以调用context.setRelayState()来获取值,然后调用super来完成其余的逻辑。

在响应阶段,继电器值将在processLogoutResponse中再次出现在上下文对象中。

在Spring SAML的Single Logout期间,没有明确的发送中继功能。