我正在对我的网站进行更改,以便我们可以成为 SAML 2.0 服务提供商。我们将使用带外帐户联合执行 IdP 发起的 SAML。
我的问题是:给定一个发布到我网站目标页面的 SAML 响应,我如何验证该响应是由受信任的来源生成的?
我可以验证嵌入在响应中的签名,但是......难道没有人可以签署响应并开始在我的网站上发布它,尝试验证用户吗?我假设我可以提取签名中的某些内容并与受信任的身份提供者列表进行匹配?但是攻击者不能欺骗吗?
我正在对我的网站进行更改,以便我们可以成为 SAML 2.0 服务提供商。我们将使用带外帐户联合执行 IdP 发起的 SAML。
我的问题是:给定一个发布到我网站目标页面的 SAML 响应,我如何验证该响应是由受信任的来源生成的?
我可以验证嵌入在响应中的签名,但是......难道没有人可以签署响应并开始在我的网站上发布它,尝试验证用户吗?我假设我可以提取签名中的某些内容并与受信任的身份提供者列表进行匹配?但是攻击者不能欺骗吗?
签名应根据密钥进行验证。对于要与之交换数据的任何实体,您都应该有一个相应的密钥。未经授权的实体将没有密钥,任何被广泛接受的良好密码协议的密钥空间都将使暴力破解成为不可能。
从您问题的措辞来看,我认为您可能希望阅读数字签名的概念。
正如@Jeff Ferland 所说,您需要信任来自远程方的密钥。
例如,这正是 Shibboleth 联盟的设计目的。如果您查看一个典型的Shibboleth SP 配置示例,它会定期提取一个元数据文件,该文件将提取属于联合的 IdP 的证书。您通常需要验证您是否信任该列表(它可以由联合证书签名,或从受信任的 HTTPS 服务器提供)。然后,您需要验证您获得的 SAML 响应是由该联合中的一个 IdP 发出的。
请注意,这只是获取受信任证书列表的一种方式。如果您事先知道您愿意信任哪些 IdP,则可以更多地手动执行此操作。您将始终必须或多或少手动配置至少一个“入口点”(我的意思是您知道您信任的一些 IdP 证书、带外证书或联邦的 CA 证书):这与任何 PKI 相同的问题,包括您如何信任浏览器中的网站。
在这种环境中真正的困难并不是真正的技术问题,而是管理部分,您可以通过它与合作伙伴协商您希望信任哪些证书(以及可以交换哪些属性)。