OpenID 和 SAML 有什么区别?

OpenID 和 SAML 有什么区别?

84345 次浏览

最初的 OpenID 2.0 vs SAML

它们是两种不同的身份验证协议,在技术层次上有所不同。

从远处看,当用户启动身份验证时,差异就开始了。使用 OpenID,用户登录通常是负责身份验证的资源的 HTTP 地址。另一方面,SAML 基于站点和标识提供程序之间的显式信任,因此很少接受来自未知站点的凭据。

OpenID 身份很容易在网上获得。作为一个开发人员,您可以接受来自非常不同的 OpenID 提供商的用户。另一方面,通常必须事先编写 SAML 提供程序,并且只能将应用程序与选定的标识提供程序联合。可以缩小接受的 OpenID 身份提供者的范围,但我认为这有悖于一般的 OpenID 概念。

使用 OpenID,您可以接受来自任意服务器的身份。有人自称是 http://someopenid.provider.com/john.smith。如何将它与数据库中的用户进行匹配?以某种方式,例如用一个新帐户存储这些信息,并在用户再次访问您的站点时识别这些信息。请注意,关于用户的任何其他信息(包括他的姓名或电子邮件)都是不可信的!

另一方面,如果您的应用程序和 SAML Id 提供程序之间存在明确的信任关系,那么您可以获得关于用户的全部信息,包括姓名和电子邮件,并且这些信息可以被信任,这仅仅是因为信任关系。这意味着您倾向于相信 Id 提供程序以某种方式验证了所有信息,并且您可以在应用程序级别信任它。如果用户使用未知提供者发出的 SAML 令牌,则应用程序只是拒绝身份验证。

OpenID 连接与 SAML

(增加07-2017,扩大08-2018)

这个答案可以追溯到2011年,当时 OpenID 代表 OpenID 2.0。后来,在2012年的某个地方,OAuth2.0已经出版,在2014年,OpenID 连接(一个更详细的时间轴 给你)。

对于现在阅读这篇文章的人来说—— OpenIDConnect 与原始答案中提到的 OpenID 不同,更确切地说,它是 OAuth2.0的一组扩展。

虽然 这个答案可以从概念上阐明一些观点,但是对于具有 OAuth2.0背景的人来说,一个非常简洁的版本是 OpenID Connect 实际上是 OAuth2.0,但是它在访问令牌可用之后添加了 查询用户信息的标准方式。

回到最初的问题—— OpenID Connect (OAuth2.0)和 SAML 之间的主要区别是应用程序和身份提供者之间如何建立信任关系:

  • SAML 在数字签名上构建信任关系,身份提供者发出的 SAML 令牌是签名的 XML,应用程序验证签名本身及其呈现的证书。用户信息包含在 SAML 令牌中,以及其他信息。

  • OAuth2在从应用程序到标识的直接 HTTP 调用上构建信任关系。请求包含访问令牌(由应用程序在协议流期间获得) ,响应包含有关用户的信息。

  • OpenID Connect 进一步扩展了这一功能,使得从应用程序调用身份提供者这一额外步骤获得身份 没有成为可能。这个想法是基于这样一个事实: OpenID Connect 提供商实际上发布了 令牌、 access_token、同一个 OAuth2.0以及新的 id_token令牌,它是由身份提供商发布的 智威汤逊令牌、 签了令牌。应用程序可以使用 id_token建立一个本地会话,基于 JWT 令牌中包含的声明,但是 id_token 不能使用可以进一步查询其他服务,这种对第三方服务的调用仍然应该使用 access_token。您可以将 OpenID Connect 视为 SAML2(签名令牌)和 OAuth2(访问令牌)之间的混合体,因为 OpenID Connect 同时涉及两者。

OpenID 和 SAML2都基于相同的联邦身份概念。以下是他们之间的一些区别。.

  1. SAML2支持单点登出,但 OpenID 不支持
  2. SAML2服务提供者与 SAML2标识提供者耦合,但 OpenID 依赖方不与 OpenID 提供者耦合。OpenID 有一个发现协议,一旦给定了一个 OpenID,它就会动态地发现相应的 OpenID 提供者。SAML 有一个基于身份提供者发现服务的发现协议 规定。
  3. 使用 SAML2时,用户与 SAML2 IdP 耦合-您的 SAML2标识符仅对发出该标识符的 SAML2 IdP 有效。但是使用 OpenID,您拥有自己的标识符,并且可以将其映射到任何您希望的 OpenID 提供者。
  4. SAML2有不同的绑定,而 OpenID 只有 HTTP 绑定
  5. SAML2可以是服务提供者(SP)发起的,也可以是身份提供者(IdP)发起的,但 OpenID 总是 SP 发起的。
  6. SAML2基于 XML,而 OpenID 不基于 XML。
  7. 过去3年开发的大多数应用程序只支持 OpenID Connect。
  8. 2018年5月微软 Azure AD 提交的8B + 身份验证请求中,92% 来自启用 OpenID Connect 的应用程序。

将技术细节放在一边,对于这个聚会来说已经太晚了,我所理解的 SAML 和其他认证标准(inc.)之间最大的区别在于。OpenID)

SAML 要求身份提供者(Identity Provider,IDP)和服务提供者(Service Provider,SP)事先了解对方、 预先配置好的静电干扰认证和授权。OpenId (+ Connect)没有这样的要求。

这对于想要完全控制谁访问数据的 IDP 来说很重要。标准的一部分是配置提供给特定 SP 的内容。

例如,银行可能不希望其用户访问任何服务,除了一些预定义的服务(由于法规或其他严格的安全规则)。

这并不意味着 OpenId IDP 不能强制执行这样的限制。OpenID 实现者可以控制访问,但这不是 OpenID 的目的。

除了预定义的、严格的、静态的、访问控制的不同之外,从概念上(不是技术上) ,OpenID 连接SAML是相似的。

底线是,如果你是 SP,你应该支持客户的需求:

  1. 如果您的客户是一个单独的最终用户客户(例如使用他们的 google id) ,那么忘记 SAML 吧。使用 OpenID 连接。
  2. 如果您的客户是一家银行,该银行希望其员工使用您的服务,并只导出它将提供给您的服务的静态数据列表,那么该银行可能希望您支持 SAML。银行可能有一个带有客户限制的 OpenID 实现,这将是你的幸运日:)

SAML 和 OpenID 都可以作为身份提供者(缩写为 IdP) ,即分散式身份验证协议(单点登录身份)。

是的ecurityAssertionMarkupL语言(SAML)是一组用于跨安全域交换身份验证和授权数据的配置文件。在 SAML 域模型中,身份提供者是一种特殊类型的身份验证授权机构。具体来说,SAML 标识提供程序是一个系统实体,它与 SAML 的 SSO 配置文件一起发出身份验证断言。使用这些身份验证断言的依赖方称为 SAML 服务提供者。来源

Pen身份证 Conconnect (OIDC)是在授权框架 OAuth 2.0之上的一个身份验证层。该标准由 OpenID 基金会控制。OAuth 用于授权协议,而不是身份验证协议和专门设计为身份验证协议的 OpenID。OIDC 使用简单的 JSON Web 令牌(JWT) ,它们更容易被 JavaScript 使用。

SAML 2.0 OAusth2 OpenID 连接
这是什么? 授权和认证的开放标准 授权开放标准 开放式认证标准
历史 由 OASIS 于2001年开发 2006年由 Twitter 和 Google 部署 在2014年部署了 OpenID 基金会
主要用例 企业应用程序的 SSO API 授权 用于消费应用程序的 SSO
格式 XML JSON JSON

来源