OpenID和SAML有什么区别?

OpenID和SAML有什么区别?

原始的OpenID 2.0与SAML

它们是两种不同的authentication协议,它们在技术层面上有所不同。

从远处开始,用户启动身份validation时会出现差异。 使用OpenID,用户login通常是负责authentication的资源的HTTP地址。 另一方面,SAML基于您的网站和身份提供商之间的明确信任,所以接受来自未知网站的凭证是相当罕见的。

OpenID身份很容易绕过networking。 作为一名开发人员,您可以接受来自非常不同的OpenID提供者的用户。 另一方面,SAML提供者通常必须提前编码,并且只将您的应用程序与选定的身份提供者联合起来。 有可能缩小接受的OpenID身份提供商的名单,但我认为这将违背一般的OpenID概念。

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

另一方面,如果您的应用程序和SAML Id Provider之间存在明确的信任关系,则可以获得有关用户的完整信息,包括姓名和电子邮件,并且由于信任关系,这些信息是可信的。 这意味着您倾向于认为Id Provider以某种方式validation了所有信息,并且您可以在应用程序级别信任它。 如果用户使用由未知供应商发布的SAML令牌,则您的应用程序只会拒绝authentication。

OpenID连接与SAML

(第07-17节添加)

这个回答date为2011年,当时OpenID代表OpenID 2.0 。 后来,在2012年的某个时候, OAuth2.0已经发布,并且在2014年, OpenID Connect (更详细的时间表在这里 )。

对于现在读这个的人来说, OpenID Connect和原来的答案是不一样的 ,而是一组OAuth2.0的扩展。

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

参考原始问题 – OpenID Connect(OAuth2.0)和SAML之间的主要区别在于应用程序和身份提供者之间是如何build立信任关系的:

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

  • OpenID Connect(OAuth2.0)在从应用程序到身份的直接HTTP调用上构build信任关系。 该请求包含访问令牌(在协议stream程中由应用程序获取),并且响应包含有关用户的信息。

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

  1. SAML2支持单点login – 但OpenID不支持
  2. SAML2服务提供商与SAML2身份提供商配合使用,但OpenID依赖方不与OpenID提供商配合使用。 OpenID有一个发现协议,一旦给出了OpenID,它就会dynamic地发现相应的OpenID提供者。 SAML有一个基于身份提供者发现服务协议的发现协议。
  3. 使用SAML2时,用户将与SAML2 IdP耦合 – 您的SAML2标识符仅对颁发该SAML2 IdP的SAML2 IdP有效。 但是使用OpenID,您拥有您的标识符,您可以将其映射到您希望的任何OpenID提供程序。
  4. SAML2具有不同的绑定,而唯一的绑定OpenID具有HTTP
  5. SAML2可以是服务提供商(SP)发起的或身份提供商(IdP)发起的。 但是OpenID始终是SP启动的。
  6. SAML 2基于XML,而OpenID则不是。

抛开技术细节,晚会太晚了,我知道SAML和其他authentication标准(包括OpenID)最大的区别在于

SAML要求身份提供者(IDP)和服务提供者(SP)相互了解, 预先configuration静态validation和授权。 OpenId(+ Connect)没有这样的要求。

这对于想要完全控制谁访问数据的国内stream离失所者很重要。 部分标准是configuration提供给特定SP的内容。

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

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

除了预定义的,严格的,静态的访问控制差异之外, OpenID Connect和SAML在概念上(不是技术上)是相似的。

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

  1. 如果您的客户是个人最终用户客户(例如使用他们的谷歌身份证),忘记SAML。 使用OpenID Connect。
  2. 如果您的客户是希望其员工使用您的服务并仅导出静态数据列表的银行,则它将提供您的服务,银行可能会希望您支持SAML。 银行可能会有一个OpenID实施与客户限制,这将是你的幸运日:)

@Prabath:OpenID支持单点login。

根据这个问题:OpenID支持通过集中身份提供商(IdP)在多个可信网站或依赖方(RP)之间进行用户身份validation。 当用户通过身份validation时,他或她可以在多个支持OpenID的网站之间自由移动,而无需重新input凭据。

SAML是基于XML的行业开放标准,用于在服务提供商和消费者之间交换用户authentication和授权信息(安全声明)。