前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSO单点登录

SSO单点登录

作者头像
WindRunnerMax
发布2020-08-27 10:45:40
2.1K0
发布2020-08-27 10:45:40
举报
文章被收录于专栏:Czy‘s Blog

SSO单点登录

SSO单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

实例

最初的时候,服务的提供者只做了一个单系统,所有的功能都在单系统上,此时不需要SSO,一次登录就可以访问所有功能,后来用户量越来越大且功能服务越来越多,为了合理利用资源和降低耦合性,服务商将功能划分为多个子系统,而子系统的用户登录凭证是相互隔离的,如果在这个子系统登录完成,再访问另一个子系统还需要登录,这显然不太合适,而SSO就是对于这种问题的解决方案,在多个系统中,用户只需要某一个系统中登录,在其他系统中都无需再次验证用户身份即可静默登录,例如在百度一次登录,再访问贴吧、网盘等都可以静默登录。

OAUTH与SSO区别

  • 从信任角度来看,OAUTH开放授权的服务端和第三方客户端不属于一个互相信任的应用群,而单点登录的子系统都在一个互相信任的应用群,通常是同一个公司提供的服务。
  • 从资源角度来看,OAUTH开放授权主要是让用户自行决定在服务端的个人资源是否允许第三方应用访问,而单点登录的资源本身都在子系统这边,主要服务是用于登录,以及管理用户在各个子系统的权限信息。

实现方案

共享SESSION

如果系统是使用SESSION来记录用户信息的话,那么就可以采用共享SESSION的方式进行实现单点登录,使用SESSION信息作为单点登录的方式就需要解决两个问题,一是子系统的SESSION是相互隔离的问题,二是用户的SESSIONID如何在客户端共享的问题。 SESSION的一致性的解决方案主要有SESSION同步、SESSION集中存储的方式,SESSION同步比较消耗资源,所以一般还是使用SESSION集中存储的方式。 对于SESSIONID在客户端共享的问题,SESSIONID主要还是存储在COOKIE中,所以需要解决的问题是COOKIE的跨域问题,对于同一个顶级域名下的二级域名,可以通过在SET-COOKIE时设置domain属性为顶级域名,即可实现在顶级域名与二级域名三级域名下的COOKIE共享,若是需要非子域名下的COOKIE共享,可以考虑使用P3P隐私参考项目平台Platform for Privacy Preferencesheader的方式跨域SET-COOKIE

Ticket

Ticket方式也称为SSO-Token,其是一个用户身份的标识,这个标识在所有子系统群中是唯一的,并且所有的子系统SERVER都可以验证这个Token并同时能够拿到这个Token所代表的用户信息,同样这种方式也需要解决COOKIE的跨域问题,同样一般也是需要使用顶级域名的domain属性或者P3Pheader的跨域SET-COOKIE

CAS

CAS中央认证服务Central Authentication Service,将认证服务单独抽出作为一个子系统,所有的登录认证服务都在CAS认证中心进行。CAS系统像是一个中转中心,可以认证所有用户的身份,同样也可以直接通过在CAS系统登录后以登录态跳转到其他各个系统。 假如我们存在三个子系统,A系统A.comB系统B.com、认证服务SSO.com,当用户已经注册,登录时的主要流程:

  • 用户打开系统A,此时用户未登录,系统自动跳转到认证服务系统SSO.com并携带参数存储跳转地址A.com
  • 用户在SSO.com输入账号密码,点击登录验证成功后,中央认证服务器返回一个Ticket,并将已经登录的COOKIE写入SSO.com认证服务的域名下,SSO.com认证服务重定向至跳转到认证服务时携带的地址,也就是上一步的A.com,并携带中央认证服务端下发的Ticket
  • 系统A得到Ticket并向本系统的服务器传递Ticket,服务端验证Ticket无误后获取Ticket中携带的用户信息,并设置当前A系统的此用户为登录态,下发COOKIE信息等用户凭据,至此该用户可正常使用A系统的服务。
  • 此时用户打开B系统,由于用户未在B系统登录,系统自动跳转到认证服务系统SSO.com并携带参数存储跳转地址B.com
  • 用户在SSO.com已经处于登录状态,此时直接从中央认证服务器获取Ticket,然后重定向至跳转到认证服务时携带的地址,也就是上一步的B.com,并携带中央认证服务端下发的Ticket
  • 系统B得到Ticket并向本系统的服务器传递Ticket,服务端验证Ticket无误后获取Ticket中携带的用户信息,并设置当前B系统的此用户为登录态,下发COOKIE信息等用户凭据,至此该用户可正常使用B系统的服务。

每日一题

代码语言:javascript
复制
https://github.com/WindrunnerMax/EveryDay

参考

代码语言:javascript
复制
https://www.zifangsky.cn/1327.html
https://zhuanlan.zhihu.com/p/66037342
https://www.jianshu.com/p/75edcc05acfd
https://blog.csdn.net/qq_32060101/article/details/83473760
https://blog.csdn.net/qq_32239417/article/details/62228624
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/cookie
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SSO单点登录
    • 实例
      • OAUTH与SSO区别
    • 实现方案
      • 共享SESSION
      • Ticket
      • CAS
    • 每日一题
      • 参考
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档