SAML与使用OAuth的联合登录


100

SAML和使用OAuth的联合登录之间有什么区别?如果公司要使用第三方Webapp,并且还希望单点登录并成为身份验证机构,那么哪种解决方案更有意义?

Answers:


128

他们解决了不同的问题。

SAML是一组已定义的标准,用于共享有关用户是谁,其属性集是什么的信息,并为您提供一种授予/拒绝访问某些内容甚至请求身份验证的方式。

OAuth的更多内容是委派访问权限。您基本上是在允许某人“扮演”您的角色。它最常用于授予可以代表您执行某些操作的访问api。

它们是完全不同的两件事。


一些例子可能会有所帮助。

OAuth想到一个Twitter。假设您正在使用Google Buzz和Twitter,并且想要编写一个能够使两者保持同步的应用程序。您基本上可以在应用程序和Twitter之间建立信任。第一次将应用程序链接到Twitter时,您会执行经典提示登录Twitter,然后弹出确认框,并询问“是否要授予对“您的应用程序名称”的访问权限?”。一旦您单击“是”,便建立了信任关系,现在您的应用程序可以在Twitter上充当您的角色。它可以阅读您的帖子,也可以发表新帖子。

SAML-对于SAML,请考虑两个不相关的成员资格系统之间的某种类型的“协议”。就我们而言,我们可以使用美国航空公司和赫兹。没有一组共享的凭证可以将您从一个站点转移到另一个站点,但是可以说,赫兹希望向US Airways提供“交易”。(当然,我知道这是一个极端的例子,但请忍受)。购买机票后,他们将向董事长提供免费租车。美国航空公司和赫兹将建立某种形式的信任,以及某种识别用户的方式。在我们的案例中,我们的“联合ID”将是电子邮件地址,这将是一种信任方式,赫兹(Hertz)相信美国航空身份提供商将以准确且安全的方式交付令牌。预订航班后,美国航空身份提供商将生成令牌并填充他们对用户进行身份验证的方式,以及在本例中有关此人的“属性”,最重要的属性是他在美国航空中的身份级别。填充令牌后,它会通过某种类型的引用传递给令牌,或者通过url进行编码,一旦到达赫兹,它就会查看令牌并对其进行验证,现在可以免费租用汽车了。

这个SAML示例的问题在于,这只是众多应用中的一个专用用例。SAML是一种标准,几乎可以通过多种方法来实现它。


另外,如果您不关心授权,则几乎可以说是通过SAML和OpenID断言身份验证。


4
我仍然没有区别。对我来说,“授予/拒绝访问”和“授予对api的访问”听起来像是同一回事。您能否举两个更相似的例子,以便我能看出差异?例如,为什么我们不能使用SAML在您的应用程序和Twitter之间建立信任关系?还是为什么不能使用OAuth for Hertz来告诉USAirways这项特殊交易?
Tim Cooper

3
我有点理解,但是我总是可以使用OAuth进行SSO(通过请求访问提供身份的API)。这是否意味着OAuth可以做到SAML可以做的更多甚至更多?
德克2015年

@Dirk,您几乎是正确的,即我们可以使用OAuth来获取用户的身份,就像许多应用程序通过Google,Facebook,GitHub进行登录以获取用户的身份和其他属性一样,以便他们进入其应用程序。但是,除了使用OAuth获得身份之外,我们确实可以实现更多目标。
chirag soni

39

看看这里总结的这个简单的解释

许多人对SAML,OpenID和OAuth之间的差异感到困惑,但这实际上非常简单。尽管存在一些重叠,但这是区分这三个的非常简单的方法。

OpenID –面向消费者的单点登录

SAML –企业用户的单点登录

OAuth –应用程序之间的API授权

对于熟悉OO设计模式的人们,我认为包装器模式有一个很好的推论。考虑一下FacadeDecoratorProxy模式。从根本上讲,这些都是相同的,它们只是包装器... 不同之处在于每种模式的意图

同样,SAML,OAuth和OpenID都通过一个通用的基础机制促进了不同的意图,该机制将重定向到服务提供者/身份授权机构以进行某些私有交互,然后再重定向到原始第三方应用程序。

环顾网上,您会发现协议功能之间存在重叠。通过OAuth进行身份验证是完全合理的。通过OAuth进行SSO可能没有多大意义,因为SAML和OpenID专为联合身份而设计。

对于问题本身,在公司环境中,SAML听起来比OAuth for SSO更合适。我敢打赌,如果您查看要与公司身份集成的第三方应用程序,将会发现它们已经设计为与SAML / LDAP / Radius等集成。IMO OAuth更适合Internet交互在大型公司环境中的应用程序之间,或者可能包括构成面向服务的体系结构的应用程序之间。

授权规则也可以在公司环境中以其他方式指定。LDAP是为此的常用工具。将用户组织到组中并将应用程序特权与组成员身份相关联是一种广泛的方法。LDAP也可以用于身份验证。Active Directory是一个很好的例子,尽管我更喜欢OpenLDAP。


1
感谢您更新链接@Sundeep
quickshift

链接已更新,但是答案中已经存在的摘要是相同的。
quickshiftin

OpenID仅基于oAuth构建。oAuth本身不支持用户界面。OpenId为我们做到了。oAuth和OpenID之间没有其他区别
这是一个陷阱

@这不是真的;OpenID与身份验证有关,OAuth与授权有关,但是它们共享类似的(浏览器重定向)机制。两者都与UI没有太大关系...也请参见此答案。您也可以在这里看。您也可以重新阅读我的答案以进一步澄清哈哈。
quickshift

1
@ It'satrap您可能想看看OpenId Spec “ 建立在OAuth 2.0之上的身份验证 ”;以及OAuth 2.0规范 “ OAuth 2.0 授权框架” ...同样,一个是为认证而设计的,另一个是为授权而设计的。对于前者,利用后者是可以的,因为它们共享一个共同的基础范例(对于我第3或第4次说,大声笑)。全部总结在我不变的答案中。您应该学习如何阅读兄弟。
quickshift

3

在这里找到好文章

在此处输入图片说明

SAML(安全性声明标记语言)是实现单点登录(SSO),联合身份验证和身份管理的一组标准。

示例:用户(主要)通过航班预订网站AirFlyer(身份提供商)进行身份验证,该网站已通过SAML与班车预订网站Shuttler(服务提供商)配置了SSO。通过传单验证后,用户无需身份验证即可在Shuttler上预订班车

OAuth(开放授权)是用于资源授权的标准。它不处理身份验证。

示例:照片共享移动应用程序(OAuth使用者),该应用程序允许用户从其Instagram帐户(OAuth提供者)导入照片,该帐户向照片共享应用程序发送临时访问令牌或密钥,该令牌或密钥会在数小时后过期。


2

SAML具有多种“配置文件”可供选择,以允许其他用户“登录”您的站点。SAML-P或SAML Passive非常常见,并且设置非常简单。WS-Trust与此类似,它也允许在网站之间进行联合。

OAuth专为授权而设计。你可以在这里阅读更多:

OpenID和OAuth有什么区别?


我很难理解“登录”和“授权”之间的区别。您能举个例子说明差异吗?
Tim Cooper

@TimCooper“登录”是身份验证的宽松术语,而“授权”是很好的授权... 根据您的请求的示例
quickshiftin 2014年

1
@quickshiftin好的,我知道这种区别。您的答案似乎暗示SAML进行身份验证,而OAuth进行授权。那是对的吗?还是两者都做-(在这种情况下,我仍然不知道有什么区别)。
蒂姆·库珀

1
@TimCooper协议具有一些重叠的功能。OAuth的目标是授权,但它也支持身份验证。公司环境中的SSO是SAML专门针对的。另一方面,SAML也支持授权。在决定使用哪种技术时,上下文是最重要的因素。去年,我为Expression Engine编写了一个扩展程序,该扩展程序使用SimpleSAMLPhp根据Kerberos后端对用户进行身份验证,然后从LDAP系统中查找授权规则。这是一个疯狂的世界!
quickshiftin

2

他们处理一个微妙的用例

  • SAML-将用户的凭证(例如SSO)共享给各种服务提供商(例如Web或Web服务)
  • OAuth-用户委派应用程序代表他/她访问资源


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.