CAS与SAML与OAuth2相比

Anj*_*jan 50 cas ruby-on-rails saml single-sign-on oauth-2.0

在你没有做任何作业的情况下让我问过于基本的问题之前,我想说我一直在做很多关于这些主题的阅读,但我仍然感到困惑.

我的需求似乎很简单.在我的公司,我们有一堆Ruby on Rails应用程序.我想构建一个所有这些应用程序都应该使用的SSO身份验证服务.

我试着做一些关于如何做到这一点的研究CAS,SAML并且阅读了OAuth2.(我知道OAuth中的"Auth"代表授权,而不是身份验证,但我阅读了足够多的文章,说明如何使用OAuth进行身份验证 - 就是其中之一.)

有人能用简单的语言告诉我这三个是什么吗?他们是替代品(竞争)吗?比较它们甚至是正确的吗?

而且有很多宝石似乎都在说非常相似的东西:

我只想要一个单独的Rails应用程序来处理我的其他Rails应用程序的所有身份验证.

注意:我不想让用户使用他们的Google/Facebook帐户登录.我们的用户已在我们的网站上拥有帐户.我希望他们能够使用该帐户登录一次,并且无需再次登录即可访问我们的所有应用程序.在任何应用中注销都应该在所有应用中签名.

UPDATE

我遇到过这两个OAuth解决方案:

他们似乎在描述与我想要的非常相似的东西.但我还没有找到任何指南/博客文章/教程,展示如何使用SAML/CAS执行此操作.

建议欢迎.

更新2

关于我们用例的更多细节.

我们没有任何现有的SAML架构.主要是我们的用户(直接在我们的网站上注册)将访问我们的所有应用程序.将来,我们可能会有第三方(合作伙伴)公司调用我们的API.我们也可能有来自这些第三方(合作伙伴)公司(在其网站上注册)访问我们的应用程序的用户.

Tha*_*rif 52

CAS服务器:

用户输入凭据(即用户名和密码)的独立中央登录页面.

CAS支持标准化的SAML 1.1协议,主要用于支持向客户端发布属性和单点注销.

(SQL数据库中的表格,ActiveDirectory/LDAP,Google帐户等)完全兼容开放的多平台CAS协议(CAS客户端适用于各种平台,包括PHP,各种Java框架,.NET ,Zope等) 多语言本地化 - RubyCAS-Server自动检测用户的首选语言并提供适当的界面.

在此输入图像描述

SAML:安全断言标记语言是一种基于XML的开放标准数据格式,用于在各方之间交换身份验证和授权数据,特别是在身份提供者和服务提供者之间.SAML授权是一个两步过程,您需要实现对两者的支持.

在此输入图像描述

OAuth 2.0:

OAuth 2.0授权框架允许第三方应用程序HTTP通过编排资源所有者和HTTP服务之间的批准交互,或者通过允许第三方应用程序获取,代表资源所有者获得对服务的有限访问代表自己访问.

在此输入图像描述

重要的提示 :

SAML具有OAuth2缺少的一项功能:SAML令牌包含用户身份信息(因为签名).使用OAuth2,您无法获得开箱即用的功能,相反,资源服务器需要进行额外的往返以使用授权服务器验证令牌.

另一方面,使用OAuth2,您可以使授权服务器上的访问令牌无效,并禁止它进一步访问资源服务器.

这两种方法都有很好的功能,两者都适用于SSO.我们已经用多种语言和各种应用程序证明了这两个概念.在一天结束时,OAuth2似乎更适合我们的需求(因为没有现成的SAML基础设施可供使用).

OAuth2提供了一种更简单,更标准化的解决方案,可以满足我们当前的所有需求,并避免使用变通方法来实现与本机应用程序的互操作性.

我什么时候应该使用哪个?

1.如果您的用例涉及SSO(当至少一个参与者或参与者是企业时),则使用SAML.

2.如果您的用例涉及提供对资源(例如帐户,图片,文件等)的访问(临时或永久),则使用OAuth.

3.如果您需要为门户提供对合作伙伴或客户应用程序的访问权限,请使用SAML.

4.如果您的用例需要集中的身份源,请使用SAML (身份提供商).

5.如果您的用例涉及移动设备,那么具有某种形式的承载令牌的OAuth2是合适的.

在此输入图像描述

参考文献1,参考文献2,参考文献3


Uri*_*hli 14

如果您需要对LDAPActiveDirectory进行身份验证,那么像上面提到的CAS宝石之一的解决方案适合您(RubyCAS,CASino).

如果您能负担得起,其中一个商业供应商(如Okta)是您的最佳选择,因为他们将始终掌握安全补丁并管理您的身份验证需求.特别是,如果您必须支持ActiveDirectory,他们已经实现了它.

OAuth对第三方身份验证最有用,但它可以执行SSO.因此,如果您想支持Google/Facebook登录或成为第三方身份验证器,那么这是一个很好的选择.由于您不想支持Google/Facebook,因此OAuth可能不是您想要的.

如果您只是打算HTTP POST用于您的SSO需求,那么ruby-saml gem可能就是您的选择.您必须实现自己的身份提供程序并向所有网站添加服务提供程序组件(可能以gem的形式.)您需要的一部分是rails api作为您的身份提供者.这个gem有助于支持在rails中编写API.

编辑

您提到未来第三方用户可能登录您的网站的可能性.这会改变你的微积分,而不是滚动自己的ruby-saml解决方案.

共享身份验证API的最佳方式是实现OAuth层.门卫是一种流行的解决方案,并且正在迅速成为Rails身份验证的标准.它的社区支持,灵活性和易用性使其成为消费者认证API的最佳方式.

用于实现门卫的Railscast


ify*_*ndy 10

安键.

我在工作中使用过CAS和OAuth.以下是我的一些看法,希望对此有所帮助.

基本上

  • CAS和SAML都旨在解决SSO问题.CAS是一种服务或认证系统,可以支持SAML协议.
  • OAuth旨在解决授权和身份验证问题.

在实践中,

  • CAS和SAML都充当属于一个组织的一组应用程序前面的网关.就像你的情况一样.
  • OAuth用于在不同组织之间进行授权和身份验证.

只是我的想法,并希望听到更多的声音.