实现单点登录的三种方式

实现单点登录的三种方式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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通达OA工作流数据报表二次开发版

    通达OA工作流数据报表二次开发版此模块除具备工作流——数据报表所有功能外,新加入的功能包括:1:查询条件自带可查询未完成的流程;2:查询条件可设置查询所有子流程的字段;3:报表可显示流程当前处理人,并且点击每列可弹出当前流程表单详情。此模块支持最新2015版本,需要其他功能可定制开发。QQ:524668994

    2022年6月23日
    35
  • 向量自回归模型(VAR)「建议收藏」

    向量自回归模型(VAR)「建议收藏」#构建VAR模型library(sandwich)library(strucchange)library(vars)data.new<-data.frame(S1,S2)VARsele

    2022年8月5日
    4
  • VIM查找关键字方法「建议收藏」

    VIM查找关键字方法「建议收藏」单击“Ctrl”+”:”进入命令行模式打“/”+“关键字”回车就可以查找了上一个匹配:”N“,下一个匹配:”n”(next)

    2022年6月25日
    337
  • win10没有telnet客户端怎么办

    win10没有telnet客户端怎么办telnet 客户端对网络工程师来说是个很有用的服务 可以通过它直接远程登录网络设备 进行管理和配置操作等 不过有用户升级 win10 系统后却遇到没有 telnet 客户端的情况 这要怎么办呢 如果你也遇到一样的问题 随小编的步伐一起来看看 windows10 中没有 telnet 客户端的详细处理步骤 具体步骤如下 1 进入 win10 后 win r 键打开运行窗口 输入 control 打开控制面板 2 查看方式选择大图标 3 在控制面板中找到程序和功能并点击打开 4 点击启用或关闭 Wi

    2025年8月3日
    2
  • bigdecimal保留小数位数_如何保留两位小数

    bigdecimal保留小数位数_如何保留两位小数packagecom.algorithms;importjava.math.BigDecimal;importjava.util.Scanner;/***调和级数求和*@authorLYY**/publicclassTiaoHeJiShuTest{publicstaticvoidmain(String[]args){System

    2022年9月16日
    2
  • [数据结构]——单调栈「建议收藏」

    [数据结构]——单调栈「建议收藏」单调栈笔者在做leetcode的题(下一个出现的最大数字)时,接触到了单调栈这一种数据结构,经过研究之后,发现单调栈在解决某些问题时出奇的好用,下面是对单调栈的性质和一些典型题目。什么是单调栈?从名字上就听的出来,单调栈中存放的数据应该是有序的,所以单调栈也分为单调递增栈和单调递减栈单调递增栈:数据出栈的序列为单调递增序列单调递减栈:数据出栈的序列为单调递减序列ps:这里一定要注意…

    2022年9月23日
    4

发表回复

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

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