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

Dar*_*lik 7 openssl saml spring-saml

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

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

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

Vla*_*fer 20

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

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

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

然后,您可以更改AuthenticationSuccessHandlerorg.springframework.security.saml.SAMLRelayStateSuccessHandler这使得重定向到成功认证后,从中继状态返回的URL.