使用或不使用断言签名对SAML响应进行签名?

Pan*_*man 15 xml sign response signature saml

在签署SAML响应时,还应该签名断言:

A)生成没有断言签名的响应签名.然后在生成两个签名后注入Assertion签名.

B)生成断言签名并在生成响应签名时包含它.

C)其他的东西.?

〜提前致谢!

dan*_*iel 40

SAML很糟糕,每次我读回答它们几乎都是正确的,这里是正确的算法:

  1. SHA1 Assertion的规范版本.
  2. 使用SHA1签名生成SignedInfo XML片段
  3. 签署SignedInfo XML片段,再次是规范形式
  4. 获取SignedInfo,Signature和密钥信息,并创建一个Signature XML片段
  5. 将此SignatureXML插入断言(应该在saml:subject之前)
  6. 不接受断言(包括签名)并插入响应中
  7. SHA1这个回应
  8. 使用SHA1签名生成SignedInfo XML片段
  9. 签署SignedInfo XML片段,再次是规范形式
  10. 获取SignedInfo,Signature和密钥信息,并创建一个Signature XML片段
  11. 将此SignatureXML插入响应中
  12. 将XML版本信息添加到响应中.

而已.SAML非常糟糕.有许多细微之处使得实现SAML成为一场噩梦(比如计算XML子集的规范形式(断言),也不包括XML文档的XML版本.

我完成了我的实施,我希望永远不要再次重新审视这种痛苦.


Ian*_*Ian 8

我相信正确答案是B).首先对Assertion进行签名,然后对包含已签名的Assertion数据的Response进行签名.但是,如果单个发行人/实体(STS/IDP /等)签署两者,那么没有真正的理由签署断言吗?只需签署协议消息/响应,其中应包括断言数据.这将减少SP的处理要求.对于Web SSO,当您有一个不同的实体签署Assertion和Response时,我只见过两个部分签名. - 伊恩


小智 6

如果你要同时签名,那么必须首先签署断言,然后是响应,因为响应签名将基于响应的全部内容(包括断言签名).因此,签署第二个断言将使响应签名无效.