单点登录服务的查询字符串参数的 Spring SAML 扩展条

Posted

技术标签:

【中文标题】单点登录服务的查询字符串参数的 Spring SAML 扩展条【英文标题】:Spring SAML Extension strips of query string param for Single Sign on Service 【发布时间】:2015-03-07 00:00:44 【问题描述】:

Spring SAML 扩展似乎忽略了在 IDP xml 中配置的查询字符串参数。这是配置

   <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://<provier host>/saml/?query1=xxx&amp;query2=yyy"/>

1) 当 SSO 请求被重定向时,SAML 扩展似乎会在 ?并仅发送 SAMLRequest 查询字符串参数。

2) 我还想根据一些配置修改查询字符串参数值,以便我可以访问特定于环境的端点进行测试和开发

有没有办法在重定向前拦截重定向请求以满足上述需求?

【问题讨论】:

【参考方案1】:

查询参数被 org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder 类中的底层 OpenSAML 库删除。您可以扩展此类,覆盖方法buildRedirectURL 并根据需要向构造的 URL 添加参数。然后需要使用接受MessageDecoderMessageEncoder 实例的构造函数将您的实现添加到bean org.springframework.security.saml.processor.HTTPRedirectDeflateBinding

【讨论】:

谢谢。我正在对其进行调试,发现在我发布问题后,OpenSAML 库会删除查询字符串。我还尝试通过 samlmessagecontext.getPeerEntityRoleMetadata().getEndpoints() 更新 url,然后使用单点登录服务,但它不起作用。我将尝试您在此处建议的解决方案。 这对我尝试使用具有高优先级的新 HttpRedirectDeflateBinding bean 覆盖 HTTPRedirectDeflateEncoder 不起作用。我在 SO ***.com/questions/48551925/… 中发布了我的努力,覆盖 bean 似乎没有生效,并且在 Idp 元数据中添加查询参数继续被剥离【参考方案2】:

使用新的 Google Apps SAML IDP 联合 SSO 解决这个问题。 弗拉基米尔的上述建议帮助我解决了这个问题。 这是我让其他人找到解决方案的确切错误。

400. That’s an error.

Invalid Request, no idpId in request URL, check if SSO URL is configured properly on SP side. That’s all we know.

【讨论】:

以上是关于单点登录服务的查询字符串参数的 Spring SAML 扩展条的主要内容,如果未能解决你的问题,请参考以下文章

spring boot应用集成cas单点登录,post请求拿不到参数

Spring Security整合JWT,实现单点登录,So Easy~!

单点登录JWT与Spring Security OAuth

使用 Spring Security 的预认证/单点登录

Sa-Token

使用 Keycloak 的 Spring Boot 应用程序,单点登录在 Apache Web 服务器后面不起作用