我们使用ruby-saml建立我们的应用程序作为服务提供商,同时使用Google作为身份提供商,但我不认为这个问题特定于Ruby或该项目。
我见过this answer from the point of view of an IdP,但我希望从SP的角度看一个,因为我很难相信Google在回复上的签名是错误的。
最重要的是,我们已经成功地与其他Google帐户集成,并且在这个帐户被破坏的同时工作。
作为服务提供商,我们如何从身份提供商处找出SAML响应无效签名的来源?
答案 0 :(得分:1)
我最终在问题中引用的答案中使用了suggestion to use XMLSec,并在Google的元数据文件中运行了已解码的base 64响应和证书。
这让我相信Google提供的IdP元数据XML文件中的证书确实存在问题。
然后我注意到我的工作帐户在文件中只有1个证书,而这个证书有两个。所以我删除了一个,但它没有用。然后我更换了它并移除了另一个,它起作用了。
然后我发现我可以将两个证书放在文件中,只要工作证书是第一个。
我不确定为什么存在差异,我不知道为什么Google会按照XMLSec无法用来验证签名的顺序输出证书。
也许有比我更多知识的人可以参与其中,但就目前而言,我很高兴地报告说,简单地颠倒证书在Google的IdP元数据文件中出现的顺序允许验证签名。
答案 1 :(得分:1)
我还需要包括此设置。 YMMV,似乎默认算法是sha1,但是我使用openssl实用工具计算的键和输出使用了sha256:
settings.idp_cert_fingerprint_algorithm = "http://www.w3.org/2000/09/xmldsig#sha256"