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