为什么在设置基于 SAML 的 SSO 时需要 IdP 证书指纹

Why is the IdP certificate fingerprint needed when setting up SAML-based SSO

前段时间,我致力于在 Web 应用程序中设置 SSO 用户身份验证。具体的 IdP 是一个 ADFS 服务器,但我认为这不是很重要。

在配置应用程序的 SSO 设置时,我注意到需要 IdP 证书的指纹,而不是证书本身。现在,据我了解,应用程序使用指纹来验证 IdP 在已发布的 SAML 令牌上的签名。

问题是应用程序如何仅使用证书指纹来验证签名?它不需要证书的 public 密钥,它是证书本身的一部分,但不是指纹的一部分?这个签名验证过程是如何工作的?

指纹在发送方和接收方之间带外交换,并在接收端配置。它使用发件人用来签署其发送的 SAML 消息的 public 密钥唯一标识证书。

然后证书本身可以作为 SAML 消息本身的一部分进行带内发送。接收方将该证书的指纹与存储的指纹进行比较,以确认在使用该密钥对 SAML 消息进行加密验证之前,它正在处理适当的发送方和关联的密钥。

这样做的好处是预先只需要在带外交换一条小消息。这可能很有用,例如当通过电话线读出时,但缺点是完整的证书需要与每条消息一起发送(好吧,原则上至少是第一条消息......)这会增加每条消息的大小。