Answers:
他们解决了不同的问题。
SAML是一组已定义的标准,用于共享有关用户是谁,其属性集是什么的信息,并为您提供一种授予/拒绝访问某些内容甚至请求身份验证的方式。
OAuth的更多内容是委派访问权限。您基本上是在允许某人“扮演”您的角色。它最常用于授予可以代表您执行某些操作的访问api。
它们是完全不同的两件事。
一些例子可能会有所帮助。
OAuth想到一个Twitter。假设您正在使用Google Buzz和Twitter,并且想要编写一个能够使两者保持同步的应用程序。您基本上可以在应用程序和Twitter之间建立信任。第一次将应用程序链接到Twitter时,您会执行经典提示登录Twitter,然后弹出确认框,并询问“是否要授予对“您的应用程序名称”的访问权限?”。一旦您单击“是”,便建立了信任关系,现在您的应用程序可以在Twitter上充当您的角色。它可以阅读您的帖子,也可以发表新帖子。
SAML-对于SAML,请考虑两个不相关的成员资格系统之间的某种类型的“协议”。就我们而言,我们可以使用美国航空公司和赫兹。没有一组共享的凭证可以将您从一个站点转移到另一个站点,但是可以说,赫兹希望向US Airways提供“交易”。(当然,我知道这是一个极端的例子,但请忍受)。购买机票后,他们将向董事长提供免费租车。美国航空公司和赫兹将建立某种形式的信任,以及某种识别用户的方式。在我们的案例中,我们的“联合ID”将是电子邮件地址,这将是一种信任方式,赫兹(Hertz)相信美国航空身份提供商将以准确且安全的方式交付令牌。预订航班后,美国航空身份提供商将生成令牌并填充他们对用户进行身份验证的方式,以及在本例中有关此人的“属性”,最重要的属性是他在美国航空中的身份级别。填充令牌后,它会通过某种类型的引用传递给令牌,或者通过url进行编码,一旦到达赫兹,它就会查看令牌并对其进行验证,现在可以免费租用汽车了。
这个SAML示例的问题在于,这只是众多应用中的一个专用用例。SAML是一种标准,几乎可以通过多种方法来实现它。
另外,如果您不关心授权,则几乎可以说是通过SAML和OpenID断言身份验证。
看看这里总结的这个简单的解释:
许多人对SAML,OpenID和OAuth之间的差异感到困惑,但这实际上非常简单。尽管存在一些重叠,但这是区分这三个的非常简单的方法。
OpenID –面向消费者的单点登录
SAML –企业用户的单点登录
OAuth –应用程序之间的API授权
对于熟悉OO设计模式的人们,我认为包装器模式有一个很好的推论。考虑一下Facade,Decorator和Proxy模式。从根本上讲,这些都是相同的,它们只是包装器... 不同之处在于每种模式的意图。
同样,SAML,OAuth和OpenID都通过一个通用的基础机制促进了不同的意图,该机制将重定向到服务提供者/身份授权机构以进行某些私有交互,然后再重定向到原始第三方应用程序。
环顾网上,您会发现协议功能之间存在重叠。通过OAuth进行身份验证是完全合理的。通过OAuth进行SSO可能没有多大意义,因为SAML和OpenID专为联合身份而设计。
对于问题本身,在公司环境中,SAML听起来比OAuth for SSO更合适。我敢打赌,如果您查看要与公司身份集成的第三方应用程序,将会发现它们已经设计为与SAML / LDAP / Radius等集成。IMO OAuth更适合Internet交互在大型公司环境中的应用程序之间,或者可能包括构成面向服务的体系结构的应用程序之间。
授权规则也可以在公司环境中以其他方式指定。LDAP是为此的常用工具。将用户组织到组中并将应用程序特权与组成员身份相关联是一种广泛的方法。LDAP也可以用于身份验证。Active Directory是一个很好的例子,尽管我更喜欢OpenLDAP。
在这里找到好文章
SAML(安全性声明标记语言)是实现单点登录(SSO),联合身份验证和身份管理的一组标准。
示例:用户(主要)通过航班预订网站AirFlyer(身份提供商)进行身份验证,该网站已通过SAML与班车预订网站Shuttler(服务提供商)配置了SSO。通过传单验证后,用户无需身份验证即可在Shuttler上预订班车
OAuth(开放授权)是用于资源授权的标准。它不处理身份验证。
示例:照片共享移动应用程序(OAuth使用者),该应用程序允许用户从其Instagram帐户(OAuth提供者)导入照片,该帐户向照片共享应用程序发送临时访问令牌或密钥,该令牌或密钥会在数小时后过期。
SAML具有多种“配置文件”可供选择,以允许其他用户“登录”您的站点。SAML-P或SAML Passive非常常见,并且设置非常简单。WS-Trust与此类似,它也允许在网站之间进行联合。
OAuth专为授权而设计。你可以在这里阅读更多:
SAML
用于身份验证-主要在“ 单点登录”方案中使用。OAuth
用于授权资源表示。
JSON Web令牌(JWT)是SAML XML令牌的替代方法。JWT可以与OAuth一起使用
一个很好的参考是SAML与OAuth:我应该使用哪个?
联合实际上是指跨系统的连接身份。它与SSO有关,但并不完全相同。我发现此博客文章对联合会真正意味着什么很有帮助。