1

我正在尝试在 saml 中使用 OPENSAML-java 生成 in SP 端

在此过程中注意到URL 长度的限制

那么在我将其发送到 TestIdP 之前,是否必须对 SAML 消息使用任何压缩技术?

如果我们使用任何压缩技术,IdP 怎么会知道那个 SP 使用了这种压缩技术来解压缩Request 消息。

元数据中是否对此有任何规定?

示例代码表示赞赏。谢谢。

4

2 回答 2

2

正如维基所说:

SAML 协议消息通常直接携带在 HTTP GET 请求的 URL 查询字符串中。由于实际中 URL 的长度是有限的,所以 HTTP Redirect 绑定适用于短消息,例如消息。较长的消息(例如,包含签名 SAML 断言的消息)应该通过其他绑定(例如 HTTP POST 绑定)传输。

通过 HTTP 重定向传输的 SAML 请求或响应分别具有 SAMLRequest 或 SAMLResponse 查询字符串参数。在发送之前,消息按顺序被放气base64 编码URL 编码。收到后,该过程被反转以恢复原始消息。

HTTP GET 示例的长度少于 600 个字符:

https://idp.example.org/SAML2/SSO/Redirect?SAMLRequest=fZFfa8IwFMXfBb9DyXvaJtZ1BqsURRC2Mabbw95ivc5Am3TJrXPffmmLY3%2FA15Pzuyf33On8XJXBCaxTRmeEhTEJQBdmr%2FRbRp63K3pL5rPhYOpkVdYib%2FCon%2BC9AYfDQRB4WDvRvWWksVoY6ZQTWlbgBBZik9%2FfCR7GorYGTWFK8pu6DknnwKL%2FWEetlxmR8sBHbHJDWZqOKGdsRJM0kfQAjCUJ43KX8s78ctnIz%2Blp5xpYa4dSo1fjOKGM03i8jSeCMzGevHa2%2FBK5MNo1FdgN2JMqPLmHc0b6WTmiVbsGoTf5qv66Zq2t60x0wXZ2RKydiCJXh3CWVV1CWJgqanfl0%2Bin8xutxYOvZL18NKUqPlvZR5el%2BVhYkAgZQdsA6fWVsZXE63W2itrTQ2cVaKV2CjSSqL1v9P%2FAXv4C

如果您使用的是 HTTP POST,则请求的参数会转到正文。所以完全没有问题。

但是你真的应该检查一下,如果消息SAMLRequest不是太长。

安全注意事项:由于使用 HTTP GET 整个请求及其参数都会记录在任何 http 访问日志中,因此您应该真正使用 POST。

于 2014-02-05T13:10:36.053 回答
1

Saml2 Http Redirect 绑定明确要求数据首先被压缩,然后是 base64 编码,最后是 URL 编码。由于规范要求,Idp 将期望以这种方式准备 Saml2Request 查询字符串参数。

据我了解,使用 Http Redirect 绑定将 AuthnRequest 发送到 Idp 是很常见的,而响应总是使用 Http Post 处理,因为它对于查询字符串来说太大了。

于 2014-02-05T17:43:05.983 回答