当前位置: 首页 > 知识库问答 >
问题:

SAML HTTP重定向绑定中未保留查询字符串

陆翰学
2023-03-14

我们的一个客户正在为他们的标识提供程序提供包含参数的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从绑定(对于HTTP重定向来说是HttpRedirectDeflateEncoder)获取MessageEncoder,并委托对消息进行编码。编码器依次在其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

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

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

共有1个答案

范鸿
2023-03-14

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

除了请求本身之外,SAML还提供了一种传递安全内容的机制,称为relayState,您可以使用Spring SAML的WebSSOProfileOptions来设置它。

以上就是清除参数的原因(至少我相信是这样,这个逻辑来自OpenSAML库,它不是由我编写的),但当然,如果您不介意安全影响,您找到的方法是很好的。

 类似资料:
  • 正在尝试重定向: 到: 我读过的大多数文章都暗示要重定向多个页面的查询字符串模式。我只是想要一个需要重定向的页面。 我最近的尝试如下所示: 非常感谢您的帮助! 更新日期:2017年4月7日 感谢所有的建议。我都试过了,有些导致错误500,有些没有效果。我已经列出了以下内容... #不变 #误差500

  • 我有以下PHP重定向脚本: 这将根据的值将用户重定向到不同的页面。推荐人成为重定向页面本身。 如何保留原始的“推荐人”字段?

  • 问题内容: 我有以下字符串(Java 1.5): 我需要一个数组: 用Java最方便的方法是什么? 问题答案: 这将为您提供所需的数组,只有第一项为空。和: 这将使数组没有空的第一项。 此处的关键是零宽度正向超前(非捕获构造)(请参阅regex pattern docs)。 表示“或者;或:” 是字边界的-在那里是为了不将第一个视为定界符(因为它是序列的开头)

  • 我很困惑,如果下面的方法是相同的?有什么细微的区别吗? 非常感谢你的建议。 方法1 方法二

  • 我在NodeJS的模块中有这个函数。当查询没有绑定时,这些函数没有问题,但当我使用绑定时,例如,在或中使用参数时,承诺不会结束,请求也永远不会结束。奇怪的是指令被执行,例如,字段被插入到表中,或者select返回数据。

  • 问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 25天前关闭。 我在更新包含HTML数据的MySQL数据时遇到了问题,我不断地修复错误;但是,一旦解决了一个错误,就会产生另一个错误。当前错误如下: 我已经进行了将近3天的Stack Overflow清理工作,但没有任何明确的答案。所以我希望有人能找到这个! 这是我的PHP表单代码: