SAML与联合使用OAuthlogin
SAML和联合login与OAuth有什么区别? 哪个解决scheme更有意义,如果一家公司想要使用第三方Web应用程序,而且还希望单点login并成为身份validation权威?
他们解决不同的问题。
SAML是一组定义的标准,用于共享有关用户是谁,属性是什么的信息,并为您提供授予/拒绝访问权限的方法,甚至请求身份validation。
OAuth更多的是委托访问的东西。 你基本上允许某人像你一样“行动”。 它最常用来授予访问API,可以代表你做一些事情。
他们是两个完全不同的东西。
一些例子可能有所帮助。
OAuth想到一个推特。 比方说,你正在使用谷歌Buzz和Twitter,并且你想写一个应用程序,以保持两个同步。 你基本上可以build立你的应用程序和Twitter之间的信任。 第一次把应用程序链接到twitter,你做经典的提示login到twitter,然后popup确认框,并询问“你想授予访问«您的应用程序名称»? 一旦你点击“是”,信任已经build立,现在你的应用程序可以在Twitter上作为你。 它可以阅读你的post,也可以制作新的。
SAML – SAML考虑两种不相关的成员系统之间的某种“协议”。 在我们的情况下,我们可以使用美国航空公司和赫兹。 没有一套共享的证书可以把你从一个网站带到另一个网站,但是可以说赫兹希望向美国航空公司提供一笔“交易”。 (当然,我知道这是一个极端的例子,但与我一起裸露)。 购买航class后,他们将免费向主席提供租车服务。 美国航空公司和赫兹将build立某种forms的信任,并以某种方式来识别用户。 在我们的情况下,我们的“联合身份证”将是电子邮件地址,这将是赫兹相信美国航空公司身份提供商将以安全的方式提供准确的令牌的单向信任集。 在预定航class后,美国航空公司的身份提供商将生成一个令牌,并填充他们如何authentication用户,以及在我们的案例中的人的“属性”,最重要的属性将是他在美国航空公司的地位。 一旦令牌被填充后,它通过某种types的引用传递,或者通过URL编码,一旦我们到达Hertz,它会查看令牌,validation它,现在可以允许免费租赁汽车。
这个SAML例子的问题是它只是一个特殊用例。 SAML是一个标准,可以实现的方法有很多。
另外,如果你不关心授权,你几乎可以争辩说,通过SAML和OpenID声明身份validation。
看看这个简单的解释总结在这里:
很多人对SAML,OpenID和OAuth之间的差异感到困惑,但实际上很简单。 虽然有一些重叠,但这是区分三者的一个非常简单的方法。
OpenID – 消费者的单一login
SAML – 企业用户的单点login
OAuth – 应用程序之间的API授权
对于面向对象devise模式的人来说,我认为包装模式有一个很好的必然结果。 考虑门面 , 装饰和代理模式。 从根本上说,这些都是一样的,他们只是包装… 不同的是每种模式的意图 。
同样, SAML,OAuth和OpenID都通过一个通用的底层机制来促进不同的意图 ,这是通过一些私人交互redirect到服务提供商/身份pipe理机构,然后redirect到原始的第三方应用程序。
环顾networking,你会发现协议的能力之间的重叠。 通过OAuth进行身份validation非常合理。 尽pipeSAML和OpenID专门针对联合身份,但OAuth上的SSO可能没有多大意义。
对于这个问题本身, 在企业环境中,SAML听起来比OAuth更适合SSO 。 我敢打赌,如果你看看你想要与你的公司身份集成的第三方应用程序,你会发现他们已经被devise为与SAML / LDAP / Radius等集成。IMO OAuth更适合于互联网互动在大型企业环境中的应用程序之间或者包括面向服务架构的应用程序之间。
授权规则也可以通过其他方式在公司环境中指定。 LDAP是一个常用的工具。 将用户组织到组中并将应用程序权限与组成员关联是一种普遍的方法。 LDAP也可以用于身份validation。 活动目录是一个很好的例子,但我更喜欢OpenLDAP。
SAML有多种“configuration文件”可供select,允许其他用户“login”到您的网站。 SAML-P或SAML被动是非常普遍而且相当简单的设置。 WS-Trust类似,它也允许在网站之间进行联合。
OAuth是为授权而devise的。 你可以在这里阅读更多:
OpenID和OAuth有什么区别?
他们处理一个微妙的用例
- SAML – 将用户的凭证(例如,SSO)共享给各种服务提供商(例如,networking或networking服务)
- OAuth – 一个用户代表他/她的应用程序来访问资源
SAML
用于身份validation – 主要用于单一login场景。 OAuth
是用于资源表示的授权。
JSON Web令牌(JWT)是SAML XML令牌的替代scheme。 JWT可以与OAuth一起使用
一个很好的参考是SAML与OAuth:我应该使用哪一个?
- Google身份validation器在Python中的实现
- Firebase 3中是否还可以对令牌进行服务器端validation?
- 使用j_security_check在Java EE / JSF中执行用户authentication
- 在将密码发送到服务器端之前,我应该散列密码吗?
- 在WebApi中使用OAuth Bearer Tokens Generation和Owin返回更多信息给客户端
- ASP.NET Web API身份validation
- 在Linux上使用Java对Active Directory进行身份validation
- Symfony2扩展DefaultAuthenticationSuccessHandler
- OpenID与OAuth