Spring saml - 在SP上启动登录时如何记住请求参数,并在IdP响应后处理它们

时间:2014-09-24 09:00:00

标签: openssl saml spring-saml

我想记住来自我网站(SP)的第一个请求的url请求参数,并在IdP的响应后使用它们。

我正在使用spring-saml扩展并考虑relayState属性,但无法找到如何使用请求中的参数构建它的示例。

我需要在sso身份验证过程之后重定向用户到目标页面(应用程序模块)取决于第一次请求中的内容。

1 个答案:

答案 0 :(得分:19)

Spring SAML示例应用程序的行为就像开箱即用。当用户点击受Spring Security保护并需要身份验证系统的页面时:

  • 通过将信息存储到HTTP会话中来记住用于调用页面的参数(使用ExceptionTranslationFilterHttpSessionRequestCache在Spring Security中自动完成)
  • 调用Spring SAML的入口点(SAMLEntryPoint类),可在IDP选择后将用户重定向到IDP
  • 用户在IDP进行身份验证并重定向回您的应用程序
  • Spring SAML验证响应并调用AuthenticationSuccessHandler,其中(在示例应用程序中)类型为org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler
  • 成功处理程序检查是否存储了存储的请求(在第一步中放置),如果是,则使用户的浏览器打开记忆的页面,其中包含与最初相同的参数集
  • 安全检查现在应该通过,前提是经过身份验证的用户有权访问该页面

您当然可以按照预期使用中继状态来实现此功能。设置中继状态的正确方法是扩展SAMLEntryPoint,重写方法getProfileOptions并在返回的WebSSOProfileOptions对象中返回所需的中继状态。

然后,您可以将AuthenticationSuccessHandler更改为org.springframework.security.saml.SAMLRelayStateSuccessHandler,以便在成功进行身份验证后重定向到从中继状态返回的URL。