认证流程之再说明 - 18965050/authz GitHub Wiki

前言

之前已经写了一篇文档介绍了我们认证系统的设计(认证设计说明),之所以再写篇文档重新说明下, 是由于:

  • 之前的文档写的比较凌乱, 没有抓住要点说明
  • 基于CAS的SSO认证原理本身并不是很复杂,但由于引入SSO Server这么个应用, 加之接入的Client应用有SPA和普通Web应用, 后期,我们又引入的权限控制, 因此需要考虑的点比较多. 要将我们的实现讲透, 就需要针对每个流程分别说明

SPA Client和普通Web Client请求的区别在于:SPA请求是异步请求,无法通过服务端的转发或重定向实现渲染,只能通过客户端依据不同的状态实现页面渲染, 而普通Web请求则可根据服务端的转发或重定向页面来进行渲染

说明

我们的认证说明流程将会涉及到:

  1. SSO Server认证
  2. 普通Web Client认证
  3. SPA Client认证

SSO Server请求, 认证及未认证情况

首先需要说明两点:

  1. 我们的SSO Server采用的是SPA异步请求方式,但实际上普通Web请求流程也已经实现了
  2. SSO server涉及到权限管理, 因此对服务端的入口请求为: auth/getUserInfo

SSO Server认证

普通Web Client认证

普通Web Client认证

SPA Client认证

SPA Client认证

总结

总结说明如下:

  1. 如果SSO client已认证, 那么我们就可以直接从SSO Client获取用户信息,走后续的流程

  2. 如果SSO Client未认证, 那么SSO Client的服务端一定会重定向到SSO Server的getTicket(普通Web应用)或返回访问SSO Server的getTicket连接(SPA应用), 并带上_ct(Client Token)参数

  3. SSO Server如果已认证, 会

    a. 重定向到SSO Client的loginCallbackUrl(普通Web应用)或返回loginCallbackUrl(SPA应用),并携带_st(Server Token)参数

    b. SSO Client先校验_st参数有效性,校验通过从SSO Server获取登录用户信息,并完成自身的认证和权限操作

  4. SSO Server如果未认证,会

    a. 要么重定向到登录界面(普通Web应用),要么返回登录界面的url给SSO Client客户端渲染登录界面(SPA应用)

    b. 界面输入登录信息, 执行登录操作. 登录成功, SSO Server可以获取到登录用户信息

    c. 同上述步骤3, 实现SSO Client的登录操作.

其他

除了上面介绍的认证流程外, 我们的统一认证及权限管理平台其实还有很多其他的实现. 比如:

  1. SSO Server会话的续命实现
  2. SSO Server会话过期
  3. SSO Client端登出和SSO Server端登出
  4. 分布式会话管理, 以及基于请求级别和操作级别的会话同步
  5. RBAC权限模型及资源鉴权
  6. 缓存设计及实现

这些在其他文档中都有介绍, 这里就不再赘述了.