我能够使用Spring Security SAML扩展程序将我的应用程序作为带有 IDP SSOCIRCLE 的SP。我的客户有以下要求:
1。断言已签名: IDP发送的断言已签名且工作正常。
2。请求/响应已签名:使用SSO Circle生成元数据文件。我选择了 AuthnRequestsSigned 选项 true 。我将SP元数据上传到SSO Circle IDP。 SP元数据具有以下值 true : AuthnRequestsSigned &的 WantAssertionsSigned 即可。在运行应用程序时,我的请求和我得到的响应都没有签名。
我有问题要完成第二项要求。我是SAML和安全人员的新手。我在这里缺少什么?
更新
考虑到弗拉基米尔的评论。我将绑定更改为HTTP-Post,所以现在我发送带有签名的SAML请求。 通过执行以下操作,我能够使用我的私钥(而不是示例项目提供的密钥)发送签名请求:
我现在需要做的是让IDP(SSOCIRCLE)将响应发送到哪里 一个。回复已签署 湾断言已签名
如何实现?我需要做些什么更改才能解决这个问题 响应的签署应该与签署声明不同。 感谢。
答案 0 :(得分:3)
HTTP-Redirect绑定要求在发送消息之前删除SAML消息本身上存在的任何ds:Signature
元素:
SAML协议消息上的任何签名,包括XML 元素本身,必须删除。注意,如果消息的内容 包括另一个签名,例如签名的SAML断言,这个 嵌入式签名未被删除。但是,这样一条消息的长度 编码后基本上排除了使用这种机制。从而 包含签名内容的SAML协议消息不应该是 使用这种机制编码。 (saml2-bindings,578-582,从PDF复制粘贴)
同时,HTTP-Redirect绑定要求将新的数字签名作为参数Signature
附加到GET URL。
这意味着使用HTTP重定向,您无法在消息级别上发送带有签名的消息,而是将签名添加到URL。因此,从Spring SAML发送到IDP的整个消息都已签名(从SP发送的数据中检查)。
除了在断言中包含签名之外,没有标准方法强制IDP发送在消息级别上签名的响应消息。如果您使用的是SSL / TLS,则传输层会提供消息的真实性和不可否认性(数字签名的特征)。