cas单点登录后跳转回原来的url_你3年工作经验,竟然连单点登录的原理都没答清楚,肯定要被刷啊......

本文深入探讨CAS单点登录系统的工作原理,重点解析如何实现在用户登录后跳转回原始请求URL。同时,分享面试中关于单点登录关键点的讨论,帮助你更好地理解和应对相关面试问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试资料9cf17b1a4295c112741f0ab77f036850.png

来自:nodotnet | 责编:乐乐

链接:https://urlify.cn/bQBjyu

# Single Sign-on

SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解。本次手撕公司的SSO原理,试图以一种简单,流畅的形式为你提供有用的SSO原理。

按照本人一贯行文风格,我们先说什么是SSO,为什么要提出SSO?

SSO:在多个系统中,只需要登陆一次,就可以访问其他相互信任的应用系统, 这个技术的提出解决了:

1.企业运行了多个服务,而账号需要集中统一管理

2.终端用户登陆一次,即可使用一个账户享受所有不同域名下服务。

SSO 与CAS(Central Authentication System)这个概念密切相关,账户集中由某个服务管理,SSO服务只负责登陆认证。

登陆认证与【服务端在浏览器上写入的认证Cookie】密切相关, Cookie 有一系列重要属性:Domain,Path, Expiration,HttpOnly 决定了该Cookie 在客户端的作用域、作用范围、有效时间、有效操作方式

# 原理

b65f709425215ffd304d2ed4f00ab6cb.png

# 用户首次访问 website1

① 用户访问website1 系统,website1系统需要认证, 用户当前没有登陆

② website1给客户端返回302重定向响应, 客户端重定向到SSO服务页

交互过程确实是临时跳转,下面传参false, 返回302临时重定向响应

context.Response.Redirect(ssoURL, false);

用户并没有登陆SSO系统,所以SSO系统会返回登陆界面

③ 用户在SSO登陆界面输出账户/密码

④ 登陆成功,SSO会在客户端写入一个 cookie for sso并产生一个301重定向响应,客户端将重定向到原website1地址,该请求附带了SSO给与这次认证成功的 ticket

http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO

⑤ website1收到以上重定向请求,解析QueryString中的ticket, 向SSO做一次ticket验证;验证通过向客户端写入本站的 cookie for website

⑥ 上面第5步,浏览器地址会显示:http://www.website1.com?ticket=XXXX-OOOO-XXXX-OOOO, 在本站验证通过之后,最好再做一个重定向,返回业务首页:www.website1.com, 本步骤不是SSO登陆的标准流程。

# 之后用户访问website2

① 用户访问website2, 用户在website2并没得到认证;跳转回 SSO

② SSO服务检测到该 用户在SSO域下存在Cookie for sso, 认定该用户已经登陆,故跳转回website2, 如上也会携带认证ticket

③ 如上,website2收到 website2.com?ticket=XXXX-OOOO-XXXX-OOOO请求, 会做一次SSO验证;验证成功,写入本站cookie for website2

# 重难点解读

① SSO认证成功,写入的cookie for sso, 是登陆到其他系统的关键

② website1收到SSO发起的重定向请求,解析出ticket=XXXX-OOOO-XXXX-OOOO, 为什么还要做一次SSO验证?

因为website1收到的带ticket请求,有可能是伪造, 所以在website1中需要去SSO验证一次。

③ 标准的CAS登陆流程有两次302客户端重定向, 分别由原站点website1和SSO启动。

理论上 整个流程由服务端重定向也是可以的 ??看官若发现有漏洞,可在评论区回复。 

④ 退出SSO登陆, 要做两件事情:

- 向SSO发起api请求,请求SSO删除用户在SSO域下的认证cookie for sso

- 移除本站的cookie for website1

⑤ 每个website,至少需要如下sso配置     

"SsoOptions": {    "BaseAddress": "https://sso-cas.sso.com",       // 基地址    "LoginPath": "/login",                             // sso登陆地址    "LogoutPath": "/api/logout",                       // 退出sso登陆的api地址    "ValidateTGTPath": "/api/validate",                // 验证ticket的api地址     "UserInfoPath": "/api/v2/userinfo"                 // 从sso拿到登陆用户信息的api地址  },

That' all,这是自己对SSO登陆的一些理解, 本图文希望以流畅的思路记录SSO流程, 各位看官不要吃快餐,知其然更知其所以然很关键。 

热门内容:
  • 2020年Java框架排行榜,谁居榜首?

  • 如何优雅地根治null值引起的Bug!

  • 史上最全的数据库面试题,不看后悔篇!

  • 解锁新姿势:探讨复杂的 if-else 语句“优雅处理”的思路

  • “醒醒吧,世界上有技术驱动型公司!”

  • HttpClient连接池设置引发的一次雪崩

  • SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录

  • 老弟,你连HTTPS 原理都不懂,还给我讲“中间人攻击”,逗我吗...

  • Mybatis:颠覆你心中对事务的理解

f254c95460a6eb3ba921182392089124.png

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值