资讯专栏INFORMATION COLUMN

单点登录实现原理及小结

TigerChain / 1139人阅读

摘要:用户登录成功之后,会与认证中心及各个子系统建立会话,用户与认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话。

在工作中,有这样一个需求,因为公司有多个管理平台,每次登录一个平台都需要输入账号和密码进行登录,特别麻烦,所以,希望只需登录一个平台的账号和密码,其他平台的不用输入账号和密码也可以自动登录,即单点登录,经过两周的研究和实践,终于完成了该需求,目前公司的两个管理平台已经实现了单点登录,现将两周的研究成果总结一下。

一、单点登录概念

什么是单点登录?单点登录全称 Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。

用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话

二、单点登录的两种方式 1.同域名共享cookie

如果你的所有平台都是在同一个域名下,那么可以使用同域名共享cookie的方式来完成单点登录的信息共享。

将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”,这种做法理论上是可以的,甚至早期很多多系统登录就采用这种同域名共享cookie的方式。

  然而,可行并不代表好,共享 cookie 的方式存在众多局限。首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;第三,cookie本身不安全。

  因此,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录

2、SSO认证授权登录

上一种方法有很大的局限性,如果跨域名,就实现不了,这里我们可以借助第三方授权来实现。要实现多个平台单点登录,前提是多个平台必须要有一个唯一的账号,如手机号,邮箱,或用户名,这样才可以判断出是哪个用户。

具体实现思路

假如公司有两个不同域名或IP下的管理网站,a.com,b.com,我们想要输入用户名和密码登录a.com, 即可自动登录b.com,怎么实现呢?

登录a.com后会在a平台产生会话信息,如果我们登录b.com,怎么判断该用户已经登录a平台了,然后自己登录?这里我们需要借助第三方平台来做授权验证,即c.com,该授权中心维护一套共有的账号和密码,当用户访问 a.com 后,我们会跳转到 c.com,并带上a.com 这个来源访问地址,在c.com 中判断是否有登录,如果未登录,则给出登录界面,登录成功后,则产生会话信息,同时生成一个授权Token,保存在c.com cookie 中,然后返回给原地址,如果已经登录(即已经授权过了),则拿到cookie中保存的Token信息然后回跳到原来的访问地址,a.com 判断有Token信息,则拿着这个Token发送http请求到c.com,判断该Token是否有效,如果有效,则返回给用户信息,然后a.com拿到信息后,自动登录a.com;

当访问 b.com 时,也会去 c.com 中判断是否已经授权过了,因为a.com 已经授过权了,则会给b.com 返回授权Token,然后b.com 判断该Token是否有效,如果有效,则会返回给用户信息,b.com 自动登录,这就是单点登录的一个简单的流程。

一个完整的流程图:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25571.html

相关文章

  • CAS 5.2.x 单点登录 - 实现原理源码浅析

    摘要:上一篇文章简单介绍了在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨单点登录的实现原理。因此引入服务端作为用户信息鉴别和传递中介,达到单点登录的效果。为该流程的实现类。表示对返回结果的处理。 上一篇文章简单介绍了 CAS 5.2.2 在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨 CAS 单点登录的实现原理。 一...

    elisa.yang 评论0 收藏0
  • 前端分享之cookie的使用单点登录

    摘要:两个域之间是不是存在跨域问题,主要是根据协议域名端口号这三个点进行判断,只要有一个不一样就是跨域。例如协议不同与域名不同与端口号不同与浏览器默认情况下无法主动跨域向后端发送,需要在前端请求时加入配置项。据此,可以实现单点登录。 cookie是什么 cookie的英文意思是饼干。在计算机术语中指服务端存放在客户端的一段数据。这段数据在客户端每次进行http请求时会自动加在http请求报文...

    Backache 评论0 收藏0
  • 前端分享之cookie的使用单点登录

    摘要:两个域之间是不是存在跨域问题,主要是根据协议域名端口号这三个点进行判断,只要有一个不一样就是跨域。例如协议不同与域名不同与端口号不同与浏览器默认情况下无法主动跨域向后端发送,需要在前端请求时加入配置项。据此,可以实现单点登录。 cookie是什么 cookie的英文意思是饼干。在计算机术语中指服务端存放在客户端的一段数据。这段数据在客户端每次进行http请求时会自动加在http请求报文...

    MudOnTire 评论0 收藏0
  • 多站点单点登录实现方案

    摘要:今天写一篇关于多域名下单点登录的实现。因为站点的域名不同,基于同源策略,是没法共享的,所以我们采取主动请求的方式,将用户唯一凭证通过接口传过去。多站点单点登录肯定还有其他优秀的解决方案,欢迎小伙伴们评论区一起交流探讨呀 今天写一篇关于多域名下单点登录的实现。 有这么个场景,公司下有多个不同域名的站点,我们期望用户在任意一个站点下登录后,在打开另外几个站点时,也是已经登录的状态,这么一过...

    hearaway 评论0 收藏0
  • Python Flask单点登录问题

    摘要:如果一旦加密算法泄露了,攻击者可以在本地建立一个实现了登录接口的假冒父应用,通过绑定来把子应用发起的请求指向本地的假冒父应用,并作出回应。 1.什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。客户端持有ID,服务端持有session...

    tuomao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<