xml - 使用或不使用断言签名签署 SAML 响应?

标签 xml response signature saml sign

当签署一个 SAML 响应也有一个已签署的断言时,我应该:

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

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

C) 还有别的吗?

最佳答案

SAML 太糟糕了,每次我阅读答案时它们几乎都是正确的,这里是提炼出的正确算法:

  1. SHA1 断言的规范版本。
  2. 生成带有 SHA1 签名的 SignedInfo XML 片段
  3. 签署 SignedInfo XML 片段,同样是规范形式
  4. 获取 SignedInfo、Signature 和 key 信息并创建一个 Signature XML 片段
  5. 将此 SignatureXML 插入到断言中(应该在 saml:subject 之前)
  6. 现在获取断言(包含签名)并将其插入到响应中
  7. SHA1 这个响应
  8. 生成带有 SHA1 签名的 SignedInfo XML 片段
  9. 签署 SignedInfo XML 片段,同样是规范形式
  10. 获取 SignedInfo、Signature 和 key 信息并创建一个 Signature XML 片段
  11. 将此 SignatureXML 插入到响应中
  12. 将 XML 版本信息添加到响应中。

就是这样。 SAML 非常糟糕。有很多细微之处使实现 SAML 成为一场噩梦(比如计算 XML 子集的规范形式(断言),而且不包括 XML 文档的 XML 版本。

我完成了我的实现,我希望再也不会重温这样的痛苦。

关于xml - 使用或不使用断言签名签署 SAML 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6960886/

相关文章:

XML 数据类型转换

javascript - 基于字符串、IE加载并解析xml

ios - 表达式类型 'DataRequest' 在没有更多上下文 Swift 的情况下是不明确的

Ajax jsp 响应文本

c# - SignedXml.CheckSignature 在 .NET 4 中失败,但在 .NET 3.5、3 或 2 中有效

python - 解析具有多个同名子项的 xml 子项,python

c# - 使用 C# 解析 SOAP 响应

python - 如何在长函数签名中换行并在 Sphinx autodoc 中对其进行漂亮的格式化

c++ - C++ 中 Main 参数的 Const-Qualification

iphone - 带有XML的NSString到带有NSDictionary的NSArray