2010-05-14 85 views
82

SAML和使用OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,而且还希望单点登录并成为身份验证授权,那么哪种解决方案更有意义?SAML vs联合使用OAuth登录

回答

114

他们解决不同的问题。

SAML是一组已定义共享关于谁用户是信息的标准,他有什么属性集是,给你一个方法来授予/拒绝访问的东西,甚至要求认证。

OAuth更多关于委托访问的内容。你基本上允许某人像你一样“行动”。它最常用来授予访问api的权限,可以代表您执行某些操作。

他们是两个完全不同的东西。


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

OAuth想到一个推特。假设你使用Google Buzz和Twitter,并且你想写一个应用程序来保持两个同步。你基本上可以建立你的应用程序和twitter之间的信任。第一次将应用程序链接到twitter时,您会输入经典提示登录到twitter,然后弹出确认框并询问“您想授予访问«您的应用程序名称»吗?”一旦你点击“是”,信任已经建立,现在你的应用可以在Twitter上扮演你的角色。它可以阅读你的帖子,也可以制作新的帖子。

SAML - 对于SAML考虑两种不相关的成员系统之间的某种“协议”。在我们的情况下,我们可以使用美国航空公司和赫兹。没有共享的证书可以将您从一个网站带到另一个网站,但可以说赫兹希望向美国航空公司提供“交易”。 (当然,我知道这是一个极端的例子,但与我一起)。购买航班后,他们将向其主席成员免费租用一辆汽车。美国航空公司和赫兹将建立某种形式的信任,并以某种方式识别用户。在我们的案例中,我们的“联合身份证”将是电子邮件地址,并且这将是赫兹相信美国航空公司身份提供商将提供准确且安全的令牌的一种单向信任集。在预订航班后,美国航空公司的身份提供商将生成一个令牌并填充他们如何验证用户的身份,以及在我们的案例中关于该人的“属性”,最重要的属性将是他在美国航空公司的身份等级。一旦令牌被填充后,它会通过某种类型的引用传递给它,或者通过URL编码,一旦我们到达Hertz,它会查看令牌,验证令牌并且现在可以允许免费租赁汽车。

这个SAML例子的问题是它只是一个超出许多专用用例。 SAML是一个标准,可以实现它的方法有很多。


另外,如果你不介意那些授权护理,你几乎可以认为,通过SAML和OpenID断言验证。

+2

我仍然没有得到区别。 “授予/拒绝访问”和“授予访问API”的声音对我来说就像是一样的。你能给出两个更相似的例子,所以我可以看到差异吗?例如。为什么我们不能使用SAML在你的应用和Twitter之间建立信任?或者你为什么不能用赫兹的OAuth来告诉美国航空公司这项特殊协议? – 2014-06-06 09:08:31

+1

我有种感觉,但我总是可以用OAuth做SSO(通过请求访问提供标识的API)。这是否意味着OAuth可以完成SAML的所有功能? – dirk 2015-02-05 09:10:43

2

SAML有多种“配置文件”可供选择,允许其他用户“登录”到您的网站。 SAML-P或SAML Passive非常普通,设置起来相当简单。 WS-Trust类似,它也允许在各个网站之间进行联合。

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

What's the difference between OpenID and OAuth?

+0

我很难理解“登录”和“授权”之间的区别。你能举一个例子来说明不同之处吗? – 2014-06-06 09:04:57

+0

@TimCooper“login”对于*身份验证*是松散的术语,而“授权”是很好的授权...... [根据您的请求的示例](http://stackoverflow.com/questions/6556522/authentication-versus-authorization) – quickshiftin 2014-06-12 19:50:18

+1

@quickshiftin好的,我明白这个区别。您的答案似乎意味着SAML执行身份验证,而OAuth执行身份验证。那是对的吗?或者他们两者都做 - (在这种情况下,我仍然不知道有什么不同)。 – 2014-06-14 11:49:16

1

他们处理一个微妙的使用情况

  • SAML - 用户委托的应用 - 用户的各种服务提供商(例如,网页或Web服务)
  • 的OAuth的共享凭据(例如,SSO)访问代表他/她的
32

看看this simple explanation总结如下资源:

许多人对SAML,OpenID 和OAuth之间的差异感到困惑,但它其实很简单。虽然有一些 重叠,但这里是区分 三者的一种非常简单的方式。

的OpenID - 单点登录,为消费者

SAML - 单点登录的企业用户

的OAuth - 应用

对于人们熟悉面向对象的设计模式之间的API授权,我认为包装图案有一个很好的必然结果。想想立面,修饰器代理模式。从根本上说,这些都是一样的,他们只是包装... 不同的是意图的每个模式

同样,SAML,OAuth的和OpenID所有有利于通过共同的基本机制,这是重定向到一些私人交互服务提供商/身份授权,然后重定向到发起第三方不同的意图应用程序。

环顾网络,你会发现协议的能力之间的重叠。 Authentication via OAuth是完全合理的。尽管SAML和OpenID专门针对联合身份标识,但OAuth上的SSO可能没有多大意义。

对于企业环境中的问题本身,SAML听起来比OAuth更适合SSO。我敢打赌,如果你看看你想与你的公司身份集成的第三方应用程序,你会发现它们已经被设计为与SAML/LDAP/Radius等整合。IMO OAuth更适合于互联网互动在大型企业环境中的应用程序之间或者包含面向服务架构的应用程序之间。

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

+1

感谢您更新链接@Sundeep – quickshiftin 2014-11-20 21:16:50

+0

链接已停用 – Gobliins 2016-07-29 08:33:00

+0

链接已更新,但已在答案中的摘要是相同的。 – quickshiftin 2016-07-29 15:11:50

1

SAML用于验证 - 主要用于单点登录方案。 OAuth用于资源表示的授权。

JSON Web Token (JWT)是SAML XML令牌的替代方案。 JWT可以通过OAuth

使用一个很好的参考是SAML vs. OAuth: Which One Should I Use?

+0

http:// stackoverflow。COM /问题/ 27314076 /差之间,智威汤逊 - 和SAML – Lijo 2016-08-15 15:05:37