我想知道是否应该使用CAS协议或OAuth + 一些身份验证提供程序进行单点登录。
示例场景:
- 用户尝试访问受保护的资源,但未通过身份验证。
- 应用程序将用户重定向到 SSO 服务器。
- 如果通过身份验证,用户会从 SSO 服务器获得一个令牌。
- SSO 重定向到原始应用程序。
- 原始应用程序根据 SSO 服务器检查令牌。
- 如果令牌正常,则允许访问并且应用程序知道用户 ID。
- 用户执行注销并同时从所有连接的应用程序中注销(单点注销)。
据我了解,这正是 CAS 发明的目的。CAS 客户端必须实现 CAS 协议才能使用身份验证服务。现在我想知道在客户端(消费者)站点上使用 CAS 或 OAuth。OAuth 是 CAS 的那部分的替代品吗?是否应该首选 OAuth 作为新的事实标准?是否有一个易于使用的(不是 Sun OpenSSO!)替代 CAS 的身份验证部分,支持不同的方法,如用户名/密码、OpenID、TLS 证书......?
语境:
- 不同的应用程序应该依赖于 SSO 服务器的身份验证,并且应该使用类似会话的东西。
- 应用程序可以是 GUI Web 应用程序或 (REST) 服务。
- SSO 服务器必须提供一个用户 ID,这是从中央用户信息存储中获取有关用户的更多信息(如角色、电子邮件等)所必需的。
- 单点注销应该是可能的。
- 大多数客户端都是用 Java 或 PHP 编写的。
我刚刚发现了 WRAP,它可能成为 OAuth 的继任者。它是微软、谷歌和雅虎指定的新协议。
附录
我了解到 OAuth 不是为身份验证而设计的,即使它可以用于实现 SSO,但只能与 OpenID 等 SSO 服务一起使用。
在我看来,OpenID 是“新 CAS”。CAS 有一些 OpenID 缺失的功能(如单点注销),但在特定场景中添加缺失的部分应该不难。我认为 OpenID 具有广泛的接受度,最好将 OpenID 集成到应用程序或应用程序服务器中。我知道 CAS 也支持 OpenID,但我认为 CAS 对 OpenID 是可有可无的。