CAS或OAuth的SSO?

我想知道是否应该使用CAS协议或OAuth +一些身份validation提供程序进行单一login。

示例scheme:

  1. 用户尝试访问受保护的资源,但未通过身份validation。
  2. 应用程序将用户redirect到SSO服务器。
  3. 如果进行身份validation,则用户从SSO服务器获取令牌。
  4. SSOredirect到原始应用程序。
  5. 原始应用程序检查令牌对SSO服务器。
  6. 如果令牌没有问题,访问将被允许,应用程序知道用户ID。
  7. 用户执行注销并同时从所有连接的应用程序中注销(单点注销)。

据我所知,这正是CAS发明的。 CAS客户端必须执行CAS协议才能使用authentication服务。 现在我想知道在客户(消费者)网站上使用CAS或OAuth。 OAuth是CAS的一部分的替代品吗? 应该将OAuth作为新的事实标准吗? 是否有一个易于使用(而不是Sun OpenSSO!)替代CAS的authentication部分支持不同的方法,如用户名/密码,OpenID,TLS certifactes …?

语境:

  • 不同的应用程序应该依赖于SSO服务器的身份validation,并应使用会话类似的东西。
  • 应用程序可以是GUI Web应用程序或(REST)服务器。
  • SSO服务器必须提供用户标识,这对于从中央用户信息存储区获取有关用户angular色,电子邮件等更多信息是必要的。
  • 单次退出应该是可能的。
  • 大多数客户端是用Java或PHP编写的。

我刚刚发现了WRAP ,可以成为OAuth的继任者。 这是由微软,谷歌和雅虎指定的新协议。

附录

我了解到,OAuth并不是用于身份validation的,即使它可以用于实现SSO,但只能与OpenID之类的SSO服务一起使用。

OpenID在我看来是“新CAS”。 CAS有一些OpenID未命中的特性(如单点登出),但是在特定场景中添加缺less的部分不应该很难。 我认为OpenID已被广泛接受,最好将OpenID集成到应用程序或应用程序服务器中。 我知道CAS也支持OpenID,但我认为CAS是OpenID的可有可无。

OpenID不是CAS的“继任者”或“替代者”,他们在意图和实施上是不同的。

CAS 集中authentication。 如果您希望所有(可能是内部的)应用程序要求用户login到单个服务器(所有应用程序都configuration为指向单个CAS服务器),请使用它。

OpenID 分散authentication。 如果您希望您的应用程序接受用户login他们想要的任何身份validation服务(用户提供OpenID服务器地址 – 实际上,“username”是服务器的URL),请使用它。

以上都没有处理授权(没有扩展和/或定制)。

OAuth处理授权,但它不能代替传统的“USER_ROLES表”(用户访问)。 它处理第三方的授权。

例如,您希望您的应用程序与Twitter集成:用户可以允许它在更新数据或发布新内容时自动发送推文。 您希望代表某个用户访问某些第三方服务或资源,而不必获取他的密码(这对用户来说显然是不安全的)。 该应用程序要求Twitter访问, 用户授权(通过Twitter),然后该应用程序可以访问。

所以,OAuth不是关于单一login(也不是CAS协议的替代)。 这不是关于控制用户可以访问什么。 它是关于让用户控制他们的资源如何被第三方访问。 两个非常不同的用例。

根据您所描述的情况,CAS可能是正确的select。

我倾向于这样想:

如果您控制/拥有用户身份validation系统并需要支持需要集中身份validation的异类服务器和应用程序集,请使用CAS。

如果您要支持您不拥有/支持的系统(例如Google,Facebook等)的用户身份validation,请使用OAuth。

OpenID是一种authentication协议, OAuth和OAuth WRAP是授权协议。 它们可以与混合OpenID扩展结合使用。

我强烈希望看到人们build立在具有很大动力(更多可用的支持,更容易获得第三方参与)的标准之上,即使它们不适合手头的应用程序。 在这种情况下,OAuth有动力,而不是CAS。 您应该能够完成所有或至less几乎所有您需要使用OAuth执行的操作。 在将来的某个时间点,OAuth WRAP应该进一步简化事务(使用不记名令牌并将encryption推送到协议层,这样做有一些值得的权衡),但是它仍然处于起步阶段,同时OAuth可能会做得很好。

最终,如果您select使用OpenID和OAuth,那么您可以获得更多的语言库,以及其他需要与系统集成的人员。 你也有更多的眼球看着协议,确保他们真的像他们应该是安全的。

旧post,但这可能是有用的:

CAS 3.5将支持oAuth作为客户端和服务器。 请参阅: https : //wiki.jasig.org/display/CASUM/OAuth

对我来说,SSO和OAuth之间的真正区别是授予,而不是身份validation,因为实现OAuth的服务器显然具有身份validation(您必须login到您的谷歌,openId或Facebook OAuth与客户端应用程序发生)

在SSO中,高级用户/系统pipe理员事先在“SSO应用程序”上授予最终用户对应用程序的访问权限。在OAuth中,最终用户授予应用程序访问“OAuth应用程序”上的“数据”

我不明白为什么OAuth协议不能用作SSO服务器的一部分。 只需从stream程中取出授权屏幕,然后让OAuth服务器从后台数据库中查找授权。

(我的2美分)