cas单点登录(实现了SSO架构)
cas(具体)是实现sso(抽象)的一种手段
SSO 是英文 Single Sign On 的缩写,翻译过来就是单点登录。顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果。
单点登录(SSO)思路(多个产品都是在一个域名下)
- 用户访问产品 a,向 后台服务器发送登录请求。
- 登录认证成功,服务器把用户的登录信息写入 session。
- 服务器为该用户生成一个 cookie,并加入到 response header 中,随着请求返回而写入浏览器。该 cookie 的域设定为 http://dxy.cn。
- 下一次,当用户访问同域名的产品 b 时,由于 a 和 b 在同一域名下,也是 http://dxy.cn,浏览器会自动带上之前的 cookie。此时后台服务器就可以通过该 cookie 来验证登录状态了。
详解COS
- 术语
Client:用户。
Server:中心服务器,也是 SSO 中负责单点登录的服务器。
Service:需要使用单点登录的各个服务,相当于上文中的产品 a/b。 - 接口
/login:登录接口,用于登录到中心服务器。
/logout:登出接口,用于从中心服务器登出。
/validate:用于验证用户是否登录中心服务器。
/serviceValidate:用于让各个 service 验证用户是否登录中心服务器。 - 票据
1、TGT:Ticket Grangting Ticket
TGT 是 CAS 为用户签发的登录票据,拥有了 TGT,用户就可以证明自己在 CAS 成功登录过。TGT 封装了 Cookie 值以及此 Cookie 值对应的用户信息。当 HTTP 请求到来时,CAS 以此 Cookie 值(TGC)为 key 查询缓存中有无 TGT ,如果有的话,则相信用户已登录过。
2、TGC:Ticket Granting Cookie
CAS Server 生成TGT放入自己的 Session 中,而 TGC 就是这个 Session 的唯一标识(SessionId),以 Cookie 形式放到浏览器端,是 CAS Server 用来明确用户身份的凭证。
3、ST:Service Ticket
ST 是 CAS 为用户签发的访问某一 service 的票据。用户访问 service 时,service 发现用户没有 ST,则要求用户去 CAS 获取 ST。用户向 CAS 发出获取 ST 的请求,CAS 发现用户有 TGT,则签发一个 ST,返回给用户。用户拿着 ST 去访问 service,service 拿 ST 去 CAS 验证,验证通过后,允许用户访问资源。
- CAS实现SSO思路:
1、用户访问产品 a,域名是 http://www.a.cn。
2、由于用户没有携带在 a 服务器上登录的 a cookie,所以 a 服务器返回 http 重定向,重定向的 url 是 SSO 服务器的地址,同时 url 的 query 中通过参数指明登录成功后,回跳到 a 页面。重定向的url 形如 http://sso.dxy.cn/login?service=https%3A%2F%2Fwww.a.cn。
3、由于用户没有携带在 SSO 服务器上登录的 TGC(看上面,票据之一),所以 SSO 服务器判断用户未登录,给用户显示统一登录界面。用户在 SSO 的页面上进行登录操作。
4、登录成功后,SSO 服务器构建用户在 SSO 登录的 TGT(又一个票据),同时返回一个 http 重定向。这里注意:
CAS原理与介绍: