gpt4 book ai didi

java - 查询字符串未保留在 SAML HTTP 重定向绑定(bind)中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:34 26 4
gpt4 key购买 nike

我们使用 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 从绑定(bind)(对于 HTTP 重定向是 HTTPRedirectDeflateEncoder)获取 MessageEncoder 并委托(delegate)对消息进行编码。编码器依次在其 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

所以出于某种原因,参数被有意无条件地剥离。

为什么会这样,我怎样才能以最有效的方式解决这个问题?

最佳答案

SAML 身份验证请求只能由受信任的实体发送,并且其参数不能被篡改。除了根据 HTTP-Redirect 绑定(bind)编码的 SAMLAuthnRequest 之外添加一个参数将意味着潜在的攻击者可以随心所欲地更改值,IDP 将无法检测到此类更改 - 因为该参数不会被数字签名覆盖.

除了请求本身之外,SAML 还提供了一种安全内容交付机制,称为 relayState - 您可以使用 Spring SAML 的 WebSSOProfileOptions 对其进行设置。

以上是参数被清除的原因(至少我相信是这样,这个逻辑来自 OpenSAML 库,不是我写的),但当然如果你不介意安全隐患,你找到的方法就好了。

关于java - 查询字符串未保留在 SAML HTTP 重定向绑定(bind)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com