SAML和OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,同时希望进行单点登录并成为认证机构,那么哪种解决方案更合理呢?
SAML和OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,同时希望进行单点登录并成为认证机构,那么哪种解决方案更合理呢?
它们解决不同的问题。
SAML 是一组标准,用于共享有关用户身份、属性集的信息,并为您提供授予/拒绝访问某些内容或甚至请求身份验证的方法。
OAuth 更多地涉及委派对某些内容的访问。基本上,您允许某人“代表”您行事。它最常用于授予访问可以代表您执行某些操作的API。
它们是两个完全不同的东西。
以下是一些可能有用的示例。
OAuth类似于Twitter。假设您正在使用Google Buzz和Twitter,并且您想编写一个应用程序以使两者同步。您可以在您的应用程序和Twitter之间建立信任关系。第一次链接应用程序到Twitter时,您需要经典提示登录Twitter,然后确认框弹出并询问“是否授予«您的应用程序名称»访问权限?”一旦您单击“是”,信任就已经建立,现在您的应用程序可以代表您在Twitter上行动。它可以读取您的帖子,并创建新的帖子。
SAML - SAML是两个不相关成员系统之间的某种“协议”。在我们的情况下,我们可以使用美国航空公司和赫兹。没有共享的凭据可以将您从一个站点带到另一个站点,但假设Hertz想向美国航空公司提供“优惠”。(虽然我知道这是一个极端的例子,但请耐心等待)。购买机票后,他们将向其主席会员提供一辆免费租车。美国航空公司和赫兹将建立某种形式的信任,并找到一种识别用户的方式。在我们的情况下,“联合身份”将是电子邮件地址,并且它将是一种单向信任,即赫兹相信美国航空公司的身份验证提供程序将以准确和安全的方式提供令牌。在预订航班后,美国航空公司的身份验证提供程序将生成一个令牌并填充有关用户已通过身份验证的信息,以及有关此人的“属性”,在我们的情况下,最重要的属性将是他在美国航空公司的状态级别。填充令牌后,它通过某种引用或编码在URL中传递,一旦到达赫兹,它就会查看令牌,验证它,现在可以允许免费租车。这个SAML示例的问题在于它只是许多专业用例中的一个。 SAML是一种标准,有太多实现方式。
或者,如果您不关心授权,您几乎可以认为通过SAML和OpenID进行身份验证。
请看这个简单解释,详见此处:
许多人对SAML、OpenID和OAuth之间的区别感到困惑,但实际上很简单。虽然有些重叠,以下是一个非常简单的区分方式。
OpenID - 面向消费者的单点登录
SAML - 面向企业用户的单点登录
OAuth - 应用程序之间的API授权
对于熟悉OO设计模式的人来说,我认为有一个很好的类比是"包装器模式"。想象一下"Facade"(外观)、"Decorator"(装饰器)和"Proxy"(代理)模式。从根本上讲,它们都是相同的,只是包装器不同...差异在于每个模式的意图。
同样,SAML、OAuth和OpenID通过一个共同的基础机制实现了不同的意图,即重定向到服务提供商/身份验证机构以进行某些私有交互,然后将其重定向回第三方应用程序。
在网上搜索时,您会发现协议之间存在重叠的能力。通过OAuth进行身份验证是完全合理的。尽管SSO(单点登录)使用OAuth可能没有太多意义,因为SAML和OpenID专门面向联合标识。
针对这个问题,在企业环境中,对于SSO而言,SAML比OAuth更加合适。我打赌,如果您看一下您想要集成到企业身份的第三方应用程序,您会发现它们已经被设计为与SAML/LDAP/Radius等集成。在我看来,OAuth更适用于应用程序之间的Internet交互或大型企业环境中构成服务定向体系结构的应用程序。
在企业环境中,授权规则也可以通过其他方式来指定,LDAP是一种常用的工具。将用户组织成组,并将应用程序权限与组成员身份相关联是一种广泛采用的方法。恰好LDAP也可用于身份验证。Active Directory是一个很好的例子,尽管我更喜欢OpenLDAP。
在这里发现了一篇好的文章。
SAML(安全断言标记语言)是一组用于实现单点登录(SSO)、联合和身份管理的标准。
例如:用户(主体)在航班预订网站AirFlyer(身份提供者)进行认证,该网站通过SAML与穿梭预订网站Shuttler(服务提供者)配置了SSO。一旦经过Flyer的认证后,用户可以在Shuttler上预订穿梭车而无需重新认证。
OAuth(开放授权)是一个用于资源授权的标准,它不涉及认证。
例如:照片共享移动应用程序(OAuth消费者)允许用户从其Instagram账户(OAuth提供商)导入照片,该提供商向照片共享应用程序发送临时访问令牌或密钥,该令牌在几个小时后过期。
他们处理一个微妙的用例
SAML
用于身份验证-主要用于单点登录场景。 OAuth
用于资源表示的授权。
JSON Web Token(JWT)是SAML XML令牌的替代方案。 JWT可以与OAuth一起使用
一个好的参考资料是SAML vs OAuth:我应该使用哪一个?