OpenID和SAML有什么区别?
它们是两种不同的认证协议,在技术层面上存在差异。
从远处看,差异始于用户启动认证时。使用OpenID,用户登录通常是负责认证的资源的HTTP地址。另一方面,SAML基于您的站点和身份提供者之间的明确信任,因此接受来自未知站点的凭据相对不常见。
OpenID身份易于在网络上获取。作为开发人员,您可以接受来自非常不同的OpenID提供程序的用户。另一方面,SAML提供程序通常必须事先编码,并且您只能将应用程序与选定的身份提供程序联合。可以缩小接受的OpenID身份提供程序列表,但我认为这将违背一般的OpenID概念。
使用OpenID,您可以接受来自任意服务器的身份。有人声称是http://someopenid.provider.com/john.smith
。您如何将此与数据库中的用户匹配?例如通过使用新帐户存储此信息,并在用户再次访问您的站点时识别此信息。请注意,关于用户的任何其他信息(包括他的姓名或电子邮件)都不能信任!
另一方面,如果您的应用程序与SAML Id提供程序之间存在明确的信任关系,则可以获得有关用户的完整信息,包括姓名和电子邮件,并且可以信任此信息,仅仅因为存在信任关系。这意味着您倾向于相信Id提供程序已经验证了所有信息,您可以在应用程序级别上信任它。如果用户带着由未知提供程序发出的SAML令牌到来,您的应用程序将拒绝认证。
(本段添加于2017年07月,更新于2018年08月)
这个回答是2011年的,当时OpenID代表OpenID 2.0。后来在2012年左右,OAuth2.0被发布,而在2014年,OpenID Connect也随之问世(更详细的时间线请参见此处)。
对于现在阅读此内容的任何人来说,OpenID Connect与原始答案提到的OpenID不同,它实际上是OAuth2.0的一组扩展。
虽然这个回答可以从概念角度提供一些启示,但对于那些具备OAuth2.0背景的人来说,OpenID Connect的非常简洁的版本是:在访问令牌可用之后,OpenID Connect是实际上的OAuth2.0,但它添加了一种标准的方式查询用户信息。
关于原始问题——OpenID Connect(OAuth2.0)和SAML之间的主要区别是应用程序和身份提供者之间建立信任关系的方式:
SAML基于数字签名建立信任关系,由身份提供者发布的SAML令牌是已签名的XML文件,应用程序验证签名本身以及它呈现的证书。用户信息包含在SAML令牌中,还有其他信息。
OAuth2基于应用程序直接向身份验证服务器发出HTTPs调用来建立信任关系。请求包含访问令牌(应用程序在协议流程中获取),响应包含有关用户的信息。
OpenID Connect进一步扩展了这一点,使得可以在不涉及应用程序对身份验证服务器的调用的情况下获得身份。这个想法基于OpenID Connect提供商实际上发行了两个令牌,即access_token
(与OAuth2.0发行的完全相同)和新的id_token
,这是一个JWT令牌,由身份验证服务器签名。应用程序可以使用id_token
根据JWT令牌中包含的声明建立本地会话,但id_token
不能用于进一步查询其他服务。这样的第三方服务调用仍应使用access_token
。您可以将OpenID Connect视为SAML2(已签名令牌)和OAuth2(访问令牌)之间的混合体,因为OpenID Connect涉及了两者。
OpenID 和 SAML2 都基于联合身份的概念。以下是它们之间的一些区别。
撇开技术细节,我理解SAML和其他身份验证标准(包括OpenID)最大的区别在于:
SAML 要求身份提供者(IDP)和服务提供者(SP)预先知道对方,进行预配置,静态认证和授权。而 OpenID(+Connect)并没有此要求。
这对于希望全面掌控谁能访问数据的IDP很重要。标准的一部分是配置特定的SP提供什么信息。
例如,银行可能不希望其用户访问除了一些预定义服务之外的任何服务(因为法规或其他严格的安全规则)。
这并不意味着OpenId IDP不能执行这样的限制。OpenID的实现者可以控制访问,但这不是OpenID的目的。
除了预定义的、严格的、静态的访问控制差异之外,在概念上(而不是技术上),OpenID Connect 和 SAML 是类似的。
总之,如果你是一个SP,你应该支持你的客户需要:
SAML和OpenID都可以作为身份提供者(IdP)即分散式认证协议(单点登录身份验证)。
Security Assertion Markup Language(SAML)是一组用于在安全域之间交换身份验证和授权数据的配置文件。在SAML领域模型中,身份提供者是一种特殊类型的身份验证机构。具体而言,SAML身份提供者是发出身份验证声明的系统实体,与SAML的SSO配置文件一起使用。消费这些身份验证声明的受信方称为SAML服务提供商。来源
OpenID Connect(OIDC)是建立在OAuth 2.0授权框架之上的认证层。该标准由OpenID Foundation控制。OAuth是授权协议,而不是身份验证协议,而OpenID专门设计为身份验证协议。 OIDC使用简单的JSON Web令牌(JWT),它们易于通过JavaScript消费。
SAML 2.0 | OAusth2 | OpenID Connect | |
---|---|---|---|
它是什么? | 授权和身份认证的开放标准 | 授权的开放标准 | 身份认证的开放标准 |
历史 | 由OASIS于2001年开发 | 由Twitter和Google在2006年部署 | 由OpenID基金会于2014年部署 |
主要用途 | 企业应用的SSO | API授权 | 消费者应用的SSO |
格式 | XML | JSON | JSON |