一、CAS
统一身份认证CAS(Central Authenicaton Service)是SSO的开源实现,利用CAS实现SSO可以很大程度的降低开发和维护的成本。
CAS由CAS Server和CAS Client两部分组成:
- CAS Server:单点验证服务器。
- CAS Cient:共享CAS Sever登录态的客户端。
CAS三个重要术语:TGT (Ticket Granting Ticket),TGC (Ticket Granting Cookie)和ST (Service Ticket).
- ST为CAS Server签发的一张一次性票据,CAS Client使用ST与CAS Server进行交互,获取用户的验证状态;
- TGT为用户登录后生成的票根,包含用户的认证身份、有效期等,存储于CAS Server中,类似于服务器会话;
- TGC存储于cookie中,类似于会话ID,用户与CAS Server交互时,帮助用户查找相应的TGT。
CAS单点登录的完整流程如下:
- 用户通过浏览器访问CAS Client的某个界面,如访问平台已安装的某个组件
- 当CAS CIient判断用户需要进行身份认证时,携带senice返回302状态码,指示浏览器重定向到CAS Senver。service指向用户想访问的页面。
- 浏览器携service重定向到CAS Server;
- CAS Server获取并校验用户cookie中携带的TGC,若成功则身份认证成功;否则将用户重定向到CAS Server提供的登录页,由用户输入用户名、密码,再完成身份认证。
- 若用户之前登录过系统,那么CAS Server可以获取用户的TGC,根据TGC获取TGT。若首次登录,则CAS Senver会首先生成TGT。每次验证,CAS Sener根据TGT签发一个ST,然后把ST拼接到senice中,同时将相应TGC设置到用户cookie中(域为CAS Server),并返回302状态码,指示浏览器重定向到service;
- 浏览器存储TGC,并携带ST重定向到service。
- CAS Client取得ST(即请求参数的ticket)后,会向CAS Server请求验证该ST的有效性。
- 若CAS Server验证该ST有效,就告知CASClient该用户有效,并返回该用户信息。CAS Cient获取用户信息后,可以使用sesion的形式管理用户会话。后续的交互请求无需再重定向到CAS Server,CAS Client直接返回用户请求的资源即可,CAS Client获取用户信息后,可以使用session的形式管理用户会话。后续的交互请求无需再重定向到CAS Server,CAS Client直接返回用户请求的资源即可。
二、OAuth2协议
OAuth 是一个关于授权(authorization )的开放网络标准,用来授权第三方应用获取用户数据,是目前最流行的授权机制,它当前的版本是2.0.
用一个常见的场景来描述完整的OAuth2协议:用户登录A网站,想进行评论操作时,被提示需要进行登录,可选择使用B平台授权服务进行登录。B平台同意授权后,A网站可获得相应权限的资源,回到A网站,即可进行评论操作。
授权服务工作的核心内容划分为两大部分,一个是颁发授权码 code,一个是颁发访问令牌 accessToken。最终要获取到访问令牌 accessToken,才可以去请求受保护资源。
而授权码code只是一个换取访问令牌 accessToken 的临时凭证。