当签署同时具有签名断言的SAML响应时,我应该:
A) 生成没有断言签名的响应签名。然后在生成两个签名之后注入断言签名。
B) 生成断言签名并在生成响应签名时包含它。
C) 其他操作?
SAML很糟糕,每次我读到答案都几乎是正确的,这里是精简的正确算法:
就是这样。SAML完全糟糕。有许多微小的细节使得实现SAML成为一场噩梦(例如计算XML的子集(声明)的规范形式),并且XML文档的XML版本不包括在内。
我完成了我的实现,希望永远不会再次经历这样的痛苦。
正确答案是B。
如果断言方使用A对SAML响应进行签名,则依赖方必须在验证SAML响应之前删除SAML响应和SAML断言的签名。SAML核心规范指出,签名不能使用除封装签名变换或独占规范化变换以外的其他变换生成。这两个变换都无法删除SAML断言的签名。因此,依赖方无法验证SAML响应。