SAML与OAuth的联合登录

Chu*_* Wu 96 authentication oauth saml

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

Nix*_*Nix 126

他们解决不同的问题.

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

OAuth更多的是委托访问某些内容.你基本上允许某人像你一样"行事".它最常用于授予可以代表您执行某些操作的访问API.

它们是两个完全不同的东西.


一些可能有帮助的例子.

OAuth想到了一个推特.假设您使用的是Google Buzz和Twitter,并且您希望编写一个应用程序以保持两者同步.您基本上可以在您的应用和推特之间建立信任.您第一次将应用程序链接到Twitter时,会执行经典提示登录Twitter,然后弹出确认框并询问"您是否要授予"您的应用名称»的访问权限?" 点击"是"后,信任已经建立,现在您的应用可以在Twitter上充当您的身份.它可以阅读您的帖子,也可以制作新的帖子.

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

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


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

  • 我仍然没有区别."授予/拒绝访问权限"和"授予对api的访问权限"的声音对我来说同样的事情.你能举两个更相似的例子,所以我可以看出它们之间的区别吗?例如,为什么我们不能使用SAML在您的应用和Twitter之间建立信任?或者为什么你不能用OAuth为Hertz告诉USAirways特价优惠? (4认同)
  • 我得到了它,但我总是可以使用OAuth进行SSO(通过请求访问提供身份的API).这是否意味着OAuth能够做到每一件事都可以做到更好? (3认同)

qui*_*tin 37

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

许多人对SAML,OpenID和OAuth之间的差异感到困惑,但实际上非常简单.虽然有一些重叠,但这是一种区分三者的非常简单的方法.

OpenID - 为消费者提供单点登录

SAML - 企业用户的单点登录

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

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

类似地,SAML,OAuth和OpenID都通过共同的底层机制促进不同的意图,这种机制是重定向到服务提供者/身份权限以进行某些私人交互,然后重定向到发起的第三方应用程序.

在网上四处看看,您会发现协议功能之间存在重叠.通过OAuth进行身份验证非常合理.虽然SAML和OpenID专门针对联合身份,但OAO上的SSO可能没有多大意义.

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

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


Jac*_*der 6

在这里找到了好文章

在此输入图像描述

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

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

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

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