基于认证中心的单点登录系统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的配置。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CAS(Central Authentication Service)是一种单点登录(SSO)协议和服务器,用于集中管理用户的身份认证和授权。CAS通过在客户端和服务端之间建立一个可信任的认证中心来实现单点登录。当用户登录一个CAS客户端应用时,CAS会验证用户的凭据,并为其生成一个令牌(ticket)。该令牌可以用于访问其他受信任的CAS客户端应用,而无需再次输入凭据。这样,用户只需要登录一次,即可在多个应用中进行访问。 JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在不同系统之间传递安全可靠的信息。它使用JSON格式对信息进行编码,并使用数字签名进行验证和保护。JWT通常用于身份认证和授权,可以被用作用户的身份凭证。当用户登录成功后,服务器会生成一个JWT并返回给客户端。客户端在后续的请求中将该JWT作为身份凭证发送给服务器进行验证,从而实现用户认证和授权。 CAS单点登录和JWT登录都提供了一种实现用户身份认证和授权的方式。它们各有优势和适用场景。 CAS单点登录适合于企业内部系统或者具有多个相关性强的应用,CAS作为中心认证服务器,可以实现在多个应用之间共享登录状态,用户只需登录一次即可访问所有受信任的应用。CAS提供了集中管理用户身份认证和授权的能力,可以方便地管理用户的权限和会话。 JWT登录适合于分布式系统或者跨域的应用,因为JWT是基于令牌的身份验证方式,不需要在服务器端存储用户的登录状态。JWT是无状态的,每个请求都包含了认证信息,服务器通过验证JWT的数字签名来确认用户的身份和权限。JWT具有轻量级、可扩展和易于集成等优势,适用于微服务架构和前后端分离的应用。 总之,CAS单点登录和JWT登录都是常见的身份认证和授权方式,根据具体的场景和需求选择合适的方式进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王森 出发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值