单点登录(sso - single Sign On)
解释:
在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
举例:例如我们在登录QQ空间后,再去QQ的其他网站,都是默认登录的状态,这就是单点登录。
技术要点:
浏览器 输入用户名 密码 后,登录完成后,服务器生成用户session存在服务端,将对应的session_id发送给浏览器 ,存入cookie中,这个Cookie是这个用户的唯一标识。下次我们再访问这个应用的时候,请求中会带上这个Cookie,服务端会根据这个Cookie找到对应的session,通过session来判断这个用户是否登录。如果不做特殊配置,这个Cookie的名字叫做jsessionid,值在服务端(server)是唯一的
具体实现
1.CAS(中央认证服务)
- 用户访问app系统,app系统是需要登录的,但用户现在没有登录,将浏览器重定向(GET)到cas(中央认证服务,sso服务)
- 当oss服务器没有用户的认证信息时候, 返回登录表单。
- 用户提交(用户名密码和login ticket)表单(POST)。经过验证后, oss服务器生成TGC(Ticket Grant Cookie)返回存到浏览器。同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是TGC。
- 浏览器携带TGC信息重新访问App系统,app携带数据ticket和sevice参数 系统访问cas,cas验证通过后,返回200和授权信息。
- app服务器接收成功的信息后,生成cookie和session,重定向到用户访问的页面,返回app服务器自己生成的cookie
- 用户携带app服务器生成的cookie访问app服务器相应的接口(作为一个app服务器,要验证是否有自己的cookie,如果没有就重定向,重定向时,有sT到cas,没有到浏览器)
- 用户APP2(如QQ空间),app2将浏览器重定向到cas,cas携带TGC信息访问cas
- cas验证通过后,返回新的app2专属的ST
- 浏览器重新携带st信息访问App2 ,APP2去cas验证st
10.成功后生成st对应的cookie和session 。之后浏览器就可以使用cookie访问App2
-补充知识:
**TGT(Ticket Grangting Ticket)**
TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
· TGC (Ticket-granting cookie):
存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CAS Server用来明确用户身份的凭证。
参考:
- CAS Ticket票据:TGT、ST、PGT、PT、PGTIOU
https://blog.csdn.net/lld2002/article/details/46226437