SAML与OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,并且还希望单点登录并成为身份验证机构,哪种解决方案更有意义?
答案 0 :(得分:123)
他们解决了不同的问题。
SAML 是一组标准,已定义为共享有关用户是谁,他的属性集是什么的信息,并为您提供授予/拒绝访问权限的方法某事甚至要求认证。
OAuth 更多的是委托访问某些内容。你基本上允许某人像你一样“行事”。它最常用于授予可以代表您执行某些操作的访问权限。
它们是两个完全不同的东西。
可能会有所帮助的一些例子。
OAuth想到了一个推特。假设您正在使用Google Buzz和Twitter,并且您希望编写一个应用程序以保持两者同步。您基本上可以在您的应用和推特之间建立信任。您第一次将应用程序链接到Twitter时,会执行经典提示登录Twitter,然后弹出确认框并询问“您是否要授予”您的应用名称»的访问权限?“点击“是”后,信任已经建立,现在您的应用可以在Twitter上充当您的身份。它可以阅读你的帖子,也可以制作新的帖子。
SAML - 对于SAML,请考虑两个不相关的成员系统之间的某种“协议”。在我们的例子中,我们可以使用US Airways和Hertz。没有可以将您从一个站点带到另一个站点的共享凭据集,但可以说Hertz希望向US Airways提供“交易”。 (当然,我知道这是一个极端的例子,但请耐心等待)。购买航班后,他们将向其主席成员提供免费租车。 US Airways和Hertz将建立某种形式的信任,并以某种方式识别用户。在我们的案例中,我们的“联合ID”将是电子邮件地址,它将是单向信任集合Hertz相信美国航空公司身份提供商将提供准确且安全的令牌。在预订航班后,US Airways身份提供商将生成令牌并填充他们如何验证用户,以及关于此人的“属性”,最重要的属性将是他在美国航空公司的状态级别。一旦填充了令牌,它就会通过某种类型的引用传递它,或者在网址中编码,一旦我们到达赫兹,它会查看令牌,验证它,现在可以允许免费租用汽车。
这个SAML示例的问题在于它只是一个专门用例中的一个。 SAML是一种标准,你可以用太多的方法来实现它。
或者,如果您不关心授权,您几乎可以争辩说通过SAML和OpenID声明身份验证。
答案 1 :(得分:35)
查看此处总结的this simple explanation:
许多人对SAML,OpenID之间的差异感到困惑 和OAuth,但它实际上非常简单。虽然有一些 重叠,这里是一种非常简单的区分方法 3。
OpenID - 消费者的单点登录
SAML - 企业用户的单点登录
OAuth - 应用程序之间的API授权
对于那些熟悉OO设计模式的人来说,我认为包装模式是一个很好的推论。想想 Facade ,装饰器和代理模式。从根本上说这些都是相同的,它们只是包装...... 不同之处在于每种模式的意图 。
同样, SAML,OAuth和OpenID都通过公共底层机制 促进不同的意图,这是重定向到服务提供商/身份某些私人互动的权限,然后重定向到原始第三方应用程序。
在网上四处看看,你会发现协议之间存在重叠。能力。 Authentication via OAuth非常合理。虽然SAML和OpenID专门针对联合身份,但OAO上的SSO可能没有多大意义。
对于问题本身,企业上下文中的 SAML听起来比OAO更适合SSO 。我打赌如果你看看你想要与你的公司身份集成的第三方应用程序,你会发现他们已经设计好与SAML / LDAP / Radius等集成。 IMO OAuth更适用于应用程序之间的Internet交互,或者可能是在大型企业环境中包含面向服务的体系结构的应用程序。
授权规则也可以在公司环境中以其他方式指定。 LDAP是一种常见的工具。将用户组织到组中并将应用程序权限与组成员关联关联是一种普遍的方法。恰好相反,LDAP也可以用于身份验证。 Active Directory就是一个很好的例子,但我更喜欢OpenLDAP。
答案 2 :(得分:2)
SAML有多种“配置文件”供您选择,允许其他用户“登录”您的网站。 SAML-P或SAML Passive非常常见且设置起来相当简单。 WS-Trust类似,它也允许网站之间的联合。
OAuth旨在授权。你可以在这里阅读更多内容:
答案 3 :(得分:2)
他们处理一个微妙的用例
答案 4 :(得分:2)
发现好文章here
SAML(安全断言标记语言)是实现单点登录(SSO),联合身份验证和身份管理的一组标准。
示例:用户(本人)通过航班预订网站AirFlyer(身份提供商)进行身份验证,该网站已通过SAML与航天飞机预订网站Shuttler(服务提供商)进行了SSO配置。通过Flyer身份验证后,用户无需身份验证即可在Shuttler上预订班车
OAuth(开放授权)是用于资源授权的标准。它不涉及身份验证。
示例:照片共享移动应用程序(OAuth使用者),允许用户从其Instagram帐户(OAuth提供者)导入照片,该应用程序会向该照片共享应用程序发送一个临时访问令牌或密钥,该令牌或密钥将在过期后过期几个小时。
答案 5 :(得分:0)
术语联合实际上意味着跨系统的连接标识。它与SSO有关,但它们并不完全相同。 I Found this blog post really helpful in terms of what federation really means.