【发布时间】:2015-09-16 22:17:16
【问题描述】:
我们使用 Spring SAML 安全扩展在我们的应用程序中实现 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>
可以看出,有一个名为“parameter”的参数,其值为“value”。生成的重定向 URL 中不存在此参数。我调试了一下,发现SAMLProcessorImpl 从绑定中获取MessageEncoder(对于HTTP 重定向是HTTPRedirectDeflateEncoder)并委托对消息进行编码。编码器依次在其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
因此,出于某种原因,参数被有意无条件地剥离。
为什么会出现这种情况,我该如何以最有效的方式解决这个问题?
【问题讨论】:
标签: java saml-2.0 spring-saml