当签署一个 SAML 响应也有一个已签署的断言时,我应该:
A) 生成没有断言签名的响应签名。然后在生成两个签名后注入(inject)断言签名。
B) 生成断言签名并在生成响应签名时包含它。
C) 还有别的吗?
最佳答案
SAML 太糟糕了,每次我阅读答案时它们几乎都是正确的,这里是提炼出的正确算法:
- SHA1 断言的规范版本。
- 生成带有 SHA1 签名的 SignedInfo XML 片段
- 签署 SignedInfo XML 片段,同样是规范形式
- 获取 SignedInfo、Signature 和 key 信息并创建一个 Signature XML 片段
- 将此 SignatureXML 插入到断言中(应该在 saml:subject 之前)
- 现在获取断言(包含签名)并将其插入到响应中
- SHA1 这个响应
- 生成带有 SHA1 签名的 SignedInfo XML 片段
- 签署 SignedInfo XML 片段,同样是规范形式
- 获取 SignedInfo、Signature 和 key 信息并创建一个 Signature XML 片段
- 将此 SignatureXML 插入到响应中
- 将 XML 版本信息添加到响应中。
就是这样。 SAML 非常糟糕。有很多细微之处使实现 SAML 成为一场噩梦(比如计算 XML 子集的规范形式(断言),而且不包括 XML 文档的 XML 版本。
我完成了我的实现,我希望再也不会重温这样的痛苦。
关于xml - 使用或不使用断言签名签署 SAML 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6960886/