基于认证中心的单点登录系统CAS

本文描述了基于认证中心的单点登录系统,采用独立的认证中心是实现企业单点登录非常好的应用实践。

CAS需要较高的集成度,在需要实现单点登录的系统,配置认证中心地址,和认证中心交互获得用户信息。

文尾比较了,通过子域名方式和Oauth方式实现单点登录系统的差别。

基于认证中心的单点登录原理是基于ticket实现。CAS系统就是一个集成化程度很好的基于ticket单点登录系统。

单点登录步骤如下:

1.用户访问应用App Server,AppServer首先要判断用户是否登录。在之间的文章,论证过Http协议的无状态属性,用户的登录状态采用cookie保存session_id,通过session_id获得session信息,session保存在AppServer中,从AppServer内存中获得Http协议的会话信息。

2.当采用CAS结构时,需要配置CAS server,并在App Server上集成CAS client。CAS server要独立配置,CAS client部署在App Server上。App client 集成CAS client sdk,在配置文件中设置拦截器和CAS server的地址,实现认证访问。

(问题:在拦截器中,要过滤session,存储CAS server 返回的信息,这部分代码应该由用户完成)

3.如果用户没有登录,采用http 302协议重定向到认证服务中心CAS_Server,在CAS_Server完成用户的登录(以用户名密码方式验证用户),CAS_Server生成TGT (Ticket Granting Ticket),并保存在cookie中,TGT的cookie domain为CAS_Server,并返回App的ticket ST

4.将2中的App Server定义为App_1,重定向时App_1 URL作为参数拼接在CAS_Server URL中,CAS server会保存App_1和用户信息。拼接App_1 URL和ST,使用户重定向到App_1。

5.App_1在拦截器中获取用户的ST_1,用ST_1向CAS_server换取用户信息,并完成本地登录local login。此时,用户完成全局global login和本地login。

6.当用户访问App_2时,App_2通过判断是否存在本地登录local login(此时用户完成了全局login,但没有本地login),会重定向到CAS server,CAS server通过cookie中的TGT实现身份认证,并给用户颁发ST_2,返回302重定向信息返回App_2。

7.App_2获取用户ST_2(CAS server返回重定向信息时,将ST2拼接在App_2 URL中),App_2向CAS server验证ST2信息,并获取用户信息,完成用户在App_2中的local login。

单点登出步骤:

1.用户在App_1完成登出操作。

2.App_1向CAS Server发出请求进行全局登出。

3.CAS Server向App_2发出消息,完成用户登出。

代理模式

代理模式是为了解决App_1代理用户身份访问App_2的资源。为什么会有这个feature,或者说这个需求从哪里来?

  • App_2已经被CAS client保护了,App_1无法直接访问App_2资源信息。
  • App_2不信任App_1,安全要求必须要获得用户身份。

一般情况,在App_1和App_2之间通过接口直接访问。

CAS缺点&问题:

1.CAS 必须配置Https,通过url传递ST,ST没有被加密。在安全性上,ST的只能使用一次,并且只有较短的生存时间。

2.应用系统建成后,改造代价比较大。适合初建系统。

和Oauth系统的比较

1.登录方式是一致的,在Oauth服务处登录,重定向到App url+code ,App通过code获取用户信息。

2.Oauth采用jwt返回App,那么用户不能完成单点登出操作。

3.Oauth用作Proxy模式,jwt中获取token,通过token获取Api权限。Token是加密的。

4.Oauth通常应用在三方登录,为用户提供方便的登录方式,系统本身还是具有用户管理功能。

子域名方式比较:

1.子域名通过在父域名上设置全局cookie,标志用户身份。

2.子域名方式,需要全域共享session。

参考资料:

  1. 单点登录原理与简单实现  https://www.cnblogs.com/ywlaker/p/6113927.html
  2. 文档 https://apereo.github.io/cas/5.0.x/protocol/CAS-Protocol.html#proxy-web-flow-diagram
  3. 什么是单点登录(SSO) https://juejin.im/post/5cdd42f9518825693f1ebf8d

不同域名的处理方法

参考:

  1. Taobao SSO 跨域登录过程解析   https://yanmingming.wordpress.com/2017/12/12/taobao-sso-%E8%B7%A8%E5%9F%9F%E7%99%BB%E5%BD%95%E8%BF%87%E7%A8%8B%E8%A7%A3%E6%9E%90/
  2. 淘宝跨域获取Cookie分析 https://www.oschina.net/question/4873_18517
  3. 啥是单点登陆?淘宝和天猫是如何实现同时登陆的? https://cloud.tencent.com/developer/article/1443036
  4.  localStorage和cookie的跨域解决方案 https://www.haorooms.com/post/kuayu_localstorage_cookie
  5.  跨域问题导致设置 cookie 不生效 https://zhuanlan.zhihu.com/p/35618124

研究方向:HTTPS的服务配置,国密HTTPS的配置。

猜你喜欢

转载自blog.csdn.net/u011893782/article/details/105593058