mus*_*iKk 6 java saml-2.0 spring-saml
我们使用Spring SAML Security Extension在我们的应用程序中实现SAML.我们现在有以下问题:
我们的一位客户正在为其身份提供商提供包含参数的URL.元数据看起来像这样(为简洁起见,大量缩写):
<EntityDescriptor>
<IDPSSODescriptor>
<SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
Location="https://idp.example.com/login?parameter=value"/>
</IDPSSODescriptor>
</EntityDescriptor>
Run Code Online (Sandbox Code Playgroud)
可以看出,有一个名为"parameter"的参数,其值为"value".生成的重定向URL中不存在此参数.我调试了一下,发现从绑定中SAMLProcessorImpl
获取MessageEncoder
(HTTPRedirectDeflateEncoder
用于HTTP重定向)并委托编码消息.编码器依次在其buildRedirectURL
方法中执行以下操作:
// endpointURL is https://idp.example.com/login?parameter=value here
URLBuilder urlBuilder = new URLBuilder(endpointURL);
List<Pair<String, String>> queryParams = urlBuilder.getQueryParams();
queryParams.clear(); // whoops
Run Code Online (Sandbox Code Playgroud)
因此,出于某种原因,有意无条件地剥离参数.
为什么会出现这种情况?如何以最有效的方式解决这个问题?
现在我通过扩展HTTPRedirectDeflateEncoder
、复制代码buildRedirectURL
并删除queryParams.clear()
. 由于 URL 是通过简单串联创建的,因此我明确删除了所有保留的 SAML 参数(类似SigAlg
等)以避免潜在的安全问题。之后,只需更改 Spring 配置即可将所有内容连接在一起。
不过,我仍然不知道为什么该列表首先被清除。
归档时间: |
|
查看次数: |
2675 次 |
最近记录: |