实现单点登录的三种方式

实现单点登录的三种方式1.登录功能登录功能通常都是基于Cookie来实现的。当用户登录成功后,一般会将登录状态记录到Session中,或者是给用户签发一个Token,然后浏览器将Session的ID或T

大家好,又见面了,我是你们的朋友全栈君。

1.登录功能

登录功能通常都是基于 Cookie 来实现的。当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,然后浏览器将Session 的 ID 或 Token 保存到 Cookie 中,浏览器在之后的每次请求中携带它们。当服务端收到请求后,通过验证 Cookie 中的信息来判断用户是否登录 。

2.单点登录(Single Sign On, SSO)

单点登录指的是:用户只需登录一次,就可访问同一帐号平台下的多个应用系统。

单点登录的本质就是在多个应用系统中共享登录状态。如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,比如可以将 Session 存到 同一个Redis 中,用户访问时,都可以读取 同一个Redis 的 Session来获取登录状态。

但由于不同的应用系统有着不同的域名,尽管 Session 共享了,但是由于 Session ID 是往往保存在浏览器 Cookie 中的,因此无法跨域名传递,也就是说当用户在 app1.com 中登录后,Session ID 仅在浏览器访问 app1.com 时才会自动在请求头中携带,而当浏览器访问 app2.com 时,Session ID 是不会被带过去的。
所以实现单点登录的关键就是,如何让 Session ID(或 Token)在多个域中共享。
 
实现sessionid或者token多域共享主要有三种方式,父域cookie、认证中心、localstorage

3.实现方式

(1)父域cookie

将 Session ID(或 Token)保存到父域中。也就是将 Cookie 的 domain 属性设置为主域名,同时将 path 属性设置为根路径,这样所有的子域应用就都可以访问到这个 Cookie 了。

缺点:不支持跨主域名

(2)认证中心

可以部署一个认证中心,用来专门负责处理登录请求。
 
检查token:用户访问某个应用系统,应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统未登录,跳转至认证中心。认证中心根据 Cookie (认证中心的)判断用户是否在其他应用系统已登录。

返回url:如果发现用户尚未登录,则返回登录页面,等待用户登录,如果发现用户已登录,会跳转回目标 URL ,让token拼接在目标 URL 的后面,回传给目标应用系统。

验证token:应用系统拿到 Token 之后,还需要向认证中心验证Token ,防止用户伪造。确认无误后,应用系统记录用户的登录状态,并将 Token 写入 Cookie,然后给本次访问放行。(注意这个 Cookie 是当前应用系统的,其他应用系统是访问不到的。)当用户再次访问当前应用系统时,就会自动带上这个 Token,应用系统验证 Token 发现用户已登录,直接返回正常的响应。

(3)localstorage

将 Session ID (或 Token )保存到浏览器的 LocalStorage 中,前端通过 iframe+postMessage() 方式,将同一份 Token 写入到了多个域下的 LocalStorage 中,前端每次在向后端发送请求之前,都会主动从 LocalStorage 中读取 Token 并在请求中携带,这样就实现了同一份 Token 被多个域所共享。
 
此种实现方式完全由前端控制,同样支持跨域。后端需要做的仅仅是在用户登录成功后,将 Session ID (或 Token )放在响应体中传递给前端。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154220.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月30日 下午10:00
下一篇 2022年6月30日 下午10:00


相关推荐

  • hiredis的使用

    hiredis的使用Hiredis 是一个 Redis 的 C 客户端库函数 基本实现了 Redis 的协议的最小集 这里对 hiredis 的 api 作基本的介绍以及应用 主要参考 hiredis 的 README 文件以及相关源码 1 hiredis 的安装官网 https redislabs com lp hiredis 发行版本 https github com redis hiredis releases 目前最新的版本 https codeload github com redis hiredis tar gz v0 14

    2026年3月19日
    2
  • matlab wavedec2 函数,python小波变换 wavedec2函数 各个返回值详解

    matlab wavedec2 函数,python小波变换 wavedec2函数 各个返回值详解python小波变换wavedec2函数各个返回值详解python小波变换wavedec2函数各个返回值详解网上找了好多文章都没有提到这个东西,没有说明wavedec2函数各个返回值究竟是什么意思我们先看看wavedec2函数的大概形式,pywt.wavedec2(data,wavelet,mode=’symmetric’,level=None,axes=(-2,-1))…

    2022年6月29日
    43
  • 基于支持向量机的图像分类(下篇:MATLAB实现)

    基于支持向量机的图像分类(下篇:MATLAB实现)摘要 本文通过图文详细介绍如何利用支持向量机对图像进行分类 经过上篇文章对原理的介绍 这里介绍利用 MATLAB 编程实现 后续章节将介绍的主要部分有 图片数据集整理特征提取 SVM 训练与测试分类结果评价结果显示点我下载 SVM 图像分类的 MATLAB 完整程序及图片集文件 1 前言机器学习是人工智能研究发展到一定阶段的必然产物 二十世纪八十年代是机器学习成为一个独立学

    2026年3月26日
    2
  • C++代码算法题:(5).最长回文子串

    C++代码算法题:(5).最长回文子串题目及要求:给你一个字符串s,找到s中最长的回文子串。提示:1<=s.length<=1000s仅由数字和英文字母(大写和/或小写)组成原创代码:classSolution{public:stringlongestPalindrome(strings){intbegin=0;//每个当前子串的开头intend=0;//每个当前子串的末尾intvalue=0;//判断条件使用。条

    2022年6月10日
    32
  • Cursor编辑器怎么用?AI编程神器Cursor完整使用教程

    Cursor编辑器怎么用?AI编程神器Cursor完整使用教程

    2026年3月16日
    2
  • 低噪声放大器

    常用于无线电接收机前端,其作用是提高接收机的灵敏度基本性能指标工作频率可以做到0.1~26.5GHz,超过8倍频程噪声系数噪声系数(F)描述信号通过低噪声放大器时的信噪比的变化,定义为输入信噪比(Si/Ni)和输出信噪比(So/No)之比所有器件都会附带热噪声,所有信号经过放大器后信噪比必然会恶化,所以F必然大于1,如果用分贝表示则为正数对于二级串联的放大…

    2022年4月9日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号