什么是单点登录
单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的
什么是CAS
简单来说,SSO仅仅是一种架构设计思想,而CAS 则是实现 SSO 的一种手段。两者是抽象与具体的关系。当然,除了 CAS 之外,实现 SSO 还有其他手段,比如简单的 cookie。
CAS (Central Authentication Service)是耶鲁 Yale 大学发起的一个java开源项目,旨在为 Web应用系统提供一种可靠的 单点登录 解决方案(Web SSO),CAS 具有以下特点:
- 开源的企业级单点登录解决方案;
- CAS Server 为需要独立部署的Web 应用,一个独立的Web应用程序(cas.war)。;
- CAS Client 支持非常多的客户端(指单点登录系统中的各个 Web 应用),包括 Java,.Net, PHP, Perl,等
单点登录的演进
同域
同域,一般情况下是最简单的一种,一般使用cookie、session的方式就可以解决,这里我们强调一下cookie是不可以跨域的
同父域
同父域 SSO 是同域 SSO 的简单升级,唯一的不同在于,服务器在返回cookie的时候,要把cookie的domain设置为其父域。
举个栗子,http://ww.xxxx.aaa.com和http://ww.xxxx.bbb.com。他们的父域名是http://www.xxxx.com,因此将cookie的domain设置为http://www.xxxx.com即可。
3. 跨域CAS
CAS术语
- Client:用户。
- Server:中心服务器,也是 SSO 中负责单点登录的服务器。
- Service:需要使用单点登录的各个服务,相当于上文中的产品 a/b。
接口:
- /login:登录接口,用于登录到中心服务器。
- /logout:登出接口,用于从中心服务器登出。
- /validate:用于验证用户是否登录中心服务器。
- /serviceValidate:用于让各个 service 验证用户是否登录中心服务器。
票据
TGT: Ticket Grangting Ticket
TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在 CAS 成功登录过。TGT 封装了 Cookie 值以及此 Cookie 值对应的用户信息。当 HTTP 请求到来时,CAS 以此 Cookie 值 (TGC)为key 查询缓存中有无 TGT,如果有的话,则相信用户已登录过。
TGC: Ticket Granting Cookie
CAS Server 生成TGT放入自己的 Session 中,而 TGC 就是这个 Session 的唯一标识(Sessionld),以Cookie 形式放到浏览器端,是 CAS Server 用来明确用户身份的凭证。
ST: Service Ticket
ST是CAS 为用户签发的访问某一service 的票据。用户访问 service 时,service 发现用户没有ST,则要求用户去 CAS获取 ST。用户向CAS 发出获取 ST 的请求,CAS 发现用户有 TGT,则签发一个ST,返回给用户。用户拿着 ST 去访问 service,service 拿ST 去CAS 验证,验证通过后,允许用户访问资源。