手撕公司SSO登陆原理

简介: 手撕公司SSO登陆原理

Single Sign-on

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

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

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

  • 企业运行了多个服务,而账号需要集中统一管理
  • 终端用户登陆一次,即可使用一个账户享受所有不同域名下服务。

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

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

原理

用户首次访问 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收到的来自SSO的重定向请求地址,有可能是伪造, 所以在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流程, 各位看官不要吃快餐,知其然更知其所以然很关键

相关文章
|
SQL 安全 数据库
织梦CMS后台的一次破解之旅
织梦CMS后台的一次破解之旅
织梦CMS后台的一次破解之旅
(续集)记录2分钟破解知识星球验证弹窗
那我换个思路,反正网站简单,这次直接用替换的方式
1150 0
|
XML 安全 JavaScript
当面试官突然提到第三方登录时,我不禁微笑了~ 探秘WeChat公众号扫码关注登录!
当面试官突然提到第三方登录时,我不禁微笑了~ 探秘WeChat公众号扫码关注登录!
64 0
当面试官突然提到第三方登录时,我不禁微笑了~ 探秘WeChat公众号扫码关注登录!
|
安全 数据安全/隐私保护 开发者
为了管理公司公共应用账号,差点手搓一个浏览器
任何一个公司都存在或多或少的公共账号,或者叫做共享账号,定义就是一个系统,有限个账号,多个人使用。原因多种多样,比如常见的一些自媒体号(知乎号、抖音号、百家号等等)用于企业日常的宣传经营,这些平台企业只能注册一个账号,而这一个账号老板要使用、多个运营人员也要使用。又比如招聘网站(BOSS 直聘、拉钩、猎聘等等)的管理员账号,往往也是使用公司特有的电话号码或者公共邮箱注册,然后给多个人共享使用。
221 1
为了管理公司公共应用账号,差点手搓一个浏览器
|
运维 前端开发 小程序
支付宝认证道理有没有用?想考证书需要做什么准备?
现在的社会中,想要获得更好的生活,就一定要拥有过硬的技术和豪华的资历,在同等的能力下,企业更愿意选择拥有好证书的人,在拥有相同的证书时,企业才会考虑员工的技术能力。
|
前端开发 Java
SpringBoot日记本系统全程直播02:登录页面搞起来撒~~
SpringBoot日记本系统全程直播02:登录页面搞起来撒~~
101 0
|
XML 缓存 NoSQL
SpringBoot日记本系统全程直播03:把登录后台接起来撒~~(一)
Sprin大家好,我是今天晚上的主讲老师,我是兔哥。 上一讲,我们学习了登录和注册页面,以及Controller访问页面的方法,还有如何处理静态资源。 今天我们继续来学习SpringBoot日记本系统,任务是进行后台的对接。就是说,用户注册和登录的功能,需要完善起来啦。还会涉及到很多企业级开发技术哦。 总之,这一节的内容非常之多,也比较丰富。视频我后期会补上,如果跟着做做不出来,一定要下载源码慢慢比对哈。 ok,那么我们现在开整!
158 0
|
NoSQL Java Redis
SpringBoot日记本系统全程直播03:把登录后台接起来撒~~(二)
SpringBoot日记本系统全程直播03:把登录后台接起来撒~~
137 0
|
存储 缓存 安全
图解用户登录验证流程,写得太好了!
图解用户登录验证流程,写得太好了!
355 0
图解用户登录验证流程,写得太好了!
|
编解码 程序员 数据安全/隐私保护
没错,我是高端吃瓜玩家(搞懂摩斯密码)
在电气时代刚流行的时代,并没有电话手机,人们探索的第一步是如何用电去传讯消息,在这期间摩尔斯发明了电报并且获得了专利,并且他的团队(有说是他的助手艾尔菲德·维尔发明的摩尔斯电码)配套发明了一套传输的规则被称为摩尔斯电码。
702 0
没错,我是高端吃瓜玩家(搞懂摩斯密码)