浏览器证书是一份经过签名的文档,借助 CA 的公钥,我的用户代理可以验证它。
在 SAML 的元数据文件中,也有一个证书,但它看起来只是别的东西。它是什么,到底有什么用处?
答案1
它习惯于生产已签名的文档。IdP 元数据中的证书用于签署由身份提供商 (IdP) 颁发并传输给服务提供商 (SP) 的 SAML 令牌(“断言”)。
由于断言是通过用户的 Web 浏览器传输的,因此必须保护它以防止用户篡改它(例如,使得用户无法添加更多组或其他属性),因此使用 IdP 的私钥对其进行数字签名,并且 SP 会在允许您登录之前验证该签名。
换句话说,如果 SAML 断言大致相当于 OIDC 中的签名 JWT 令牌,那么证书的使用方式就如同 JWT 签名密钥一样。
(实际上,您或许可以将 SAML 断言称为“证书”,将颁发证书的 IdP 称为“证书颁发机构”...)
此外,SP 也可以拥有自己的证书,IdP 可以使用它来加密断言(例如,如果它包含不应泄露给用户的内部数据,如影子禁令状态,或只是为了尽量减少曝光,如 SSN)。这是可选的。
SP 拥有自己的证书的另一个原因是他们可以签署注销请求这些信息会被发送回 IdP。SAML2 协议支持“单点注销”,即从一个 SP 注销后,您将从所有其他 SP 以及 IdP 本身注销,但此协议涉及一长串重定向,这些重定向通过可能不一定相互信任的位置进行。
附注:尽管 SAML 中的证书与 TLS 中的证书属于同一类型的“签名文档”,但一个很大的区别是,在大多数情况下,SAML 证书是自签名的,SP 只关心确切的公钥,而忽略所有其他字段。(实际上,使用 X.509 证书的最大原因是 SAML 使用预先存在的 XML-DSig 标准,并且所有工具/库都希望处理证书。)但这并不是说它们不能由 CA 颁发;这受支持但很少需要。