101

SAML 和使用 OAuth 的联合登录之间有什么区别?如果一家公司想要使用第三方 web 应用程序,但又想要单点登录并成为身份验证机构,那么哪种解决方案更有意义?

4

7 回答 7

129

他们解决不同的问题。

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

OAuth更多的是关于授权访问某些东西。您基本上是在允许某人像您一样“行动”。它最常用于授予可以代表您做某事的访问 api。

它们是两种完全不同的东西。


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

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

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

这个 SAML 示例的问题在于它只是众多特殊用例中的一个。SAML 是一种标准,您可以通过多种方式实现它。


或者,如果您不关心授权,您几乎可以争辩说通过 SAML 和OpenID断言身份验证。

于 2011-08-04T12:30:15.890 回答
43

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

许多人对 SAML、OpenID 和 OAuth 之间的区别感到困惑,但实际上它非常简单。虽然有一些重叠,但这里有一个非常简单的区分这三者的方法。

OpenID – 消费者单点登录

SAML – 企业用户的单点登录

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

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

类似地,SAML、OAuth 和 OpenID 都通过一个共同的底层机制来促进不同的意图,即重定向到服务提供商/身份机构进行一些私人交互,然后重定向到原始第三方应用程序。

在网上环顾四周,您会发现协议功能之间存在重叠。通过 OAuth 进行身份验证是完全合理的。尽管 SAML 和 OpenID 专门针对联合身份,但基于 OAuth 的 SSO 可能没有多大意义。

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

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

于 2014-06-14T16:30:46.263 回答
4

在这里找到好文章

在此处输入图像描述

SAML(安全断言标记语言)是一组标准,用于实现单点登录 (SSO)、联合和身份管理。

示例:用户(委托人)通过航班预订网站 AirFlyer(身份提供商)进行身份验证,该网站通过 SAML 配置了 SSO,并与班车预订网站Shuttler(服务提供商)进行了身份验证。一旦通过 Flyer 的身份验证,用户就可以在 Shuttler 上预订班车,而无需进行身份验证

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

示例:允许用户从他们的 Instagram 帐户(OAuth 提供者)导入照片的照片共享移动应用程序(OAuth 消费者),该帐户向照片共享应用程序发送一个临时访问令牌或密钥,该应用程序将在几个小时后过期。

于 2018-07-03T19:52:49.453 回答
3

他们处理一个微妙的用例

  • SAML - 将用户的凭证(例如 SSO)共享给各种服务提供商(例如 Web 或 Web 服务)
  • OAuth - 委托应用程序代表他/她访问资源的用户
于 2014-03-14T03:40:51.703 回答
2

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

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

OpenID 和 OAuth 有什么区别?

于 2010-08-24T20:40:28.303 回答
1

SAML用于身份验证 - 主要用于单点登录场景。OAuth用于资源表示的授权。

JSON Web 令牌 (JWT)是 SAML XML 令牌的替代方案。JWT 可以与 OAuth 一起使用

一个很好的参考是SAML 与 OAuth:我应该使用哪一个?

于 2016-08-15T14:59:40.840 回答
0

联邦这个术语实际上意味着跨系统的连接身份。它与 SSO 有关,但它们并不完全相同。我发现这篇博文对联邦的真正含义很有帮助。

于 2018-02-14T20:33:23.943 回答