Java-前后端分离-单点登录(SSO二级跨域和跨一级域名)
一、什么是单点登录?
单点登录的英文名叫做:Single Sign On(简称SSO)。
以前的时候,一般我们就单系统,所有的功能都在同一个系统上。
后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。
比如阿里的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。,反过来也一样
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
二、回顾单系统登录
简单讲述一下怎么做单系统登录的:
众所周知,HTTP是无状态的协议,这意味着服务器无法确认用户的信息。于是乎,W3C就提出了:给每一个用户都发一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie。
如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户明细表”。
HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎:服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session是依据Cookie来识别是否是同一个用户。
所以,一般我们单系统实现登录会这样做:
登录: 将用户信息保存在Session对象中,如果在Session对象中能查到,说明已经登录如果在Session对象中查不到,说明没登录(或者已经退出了登录)
关闭浏览器: 从Session中删除用户的信息(关闭掉浏览器后,重新打开浏览器还能保持登录状态):配合Cookie来用
退出登录: 清除session,和本地cookie,跳转到登录页
具体流程:
可以看我博客的 JavaWeb-免登录UML时序图-(全网最详细)
这里面有最详细的教程
三、2种单系统登录UML时序图
因为细节太多了,所以这里只画出来流程的大概走向而具体的细节后面会说.
第一种单点登录(和淘宝,天猫一样) 都使用自己系统的登录注册页面,但是认证服务都是用一个
第二种单点登录,都使用SSO认证服务的登录页面,而注册页面因为每个系统账户注册的信息可能都不同那么可以利用重定向使用自己的注册页面(这个就需要自己设计了)
需要的技术
我们这里只实现第一种时序图的单点登录,第二种的话自己看图写代码就行了比较简单
前端工具: WebStorm 或者vs code …
后端工具: IntelliJ IDEA
前端需要的技术: vue , jquery , js , ajax , 加密算法…
后端需要的技术 java, Springboot , cookie , session , redis 加密算法…
实战案例(可跨二级域名)
项目前后端代码和效果视频:
链接:https://pan.baidu.com/s/1yxQ0bIcwKXYsdjc3qYtQzQ
提取码:1234
跨一级域名的案例
想要跨一级域名的最佳方式是前端使用iframe+postMessage的方式,后端认证中心将cookie存储jwtToken改为redis,因为cookie不能跨1级域名,而我们代码是通过上面实战案例(可跨二级域名)
改造的,如果你上面的代码都看不懂那么就别看这个案例了,必须前后端都要看懂,下图是一级域名的跨域逻辑
项目前后端代码和效果视频(升级版):
链接:https://pan.baidu.com/s/1xc2mHbN0PzhVsUk_PpMkHQ
提取码:1234
单点登录的注册,和登出,以及登录超时…原理,在我提供的项目里都有视频中也有展示,基本单点一套全完成了,需要自行看看代码,很简单其实,就看你能不能有耐心看完代码了,别忘了给我来个赞,写文章和项目不容易
access_token和refresh_token
按照Oauth2.0 的规则是需要有refresh_token和 access_token的,这个可以根据需求进行添加
- 登录成功返回 前端access_token和refresh_token
- 每次请求只携带access_token
- 如果access_token过期那么前端拿refresh_token换新的access_token
- refresh_token过期,重新进行登录
建议尽量将refresh_token保留在服务器上,而不是前端
列如:
- 我们可以放入redis中,key是ClientID(客服注册服务的唯一ID),value就是refresh_token
- 注册的ClientID写死在前端代码中
- 请刷新接口时候携带access_token和ClientID
- 利用ClientID去redis中找refresh_token换新的access_token
- refresh_token过期,重新进行登录
这样的好处就是ClientID注册时候会绑定指定的域名或者ip的如果是非法用户那么是无法请求成功的, 就算拿到access_token了也持续不了多久一般access_token设置时间非常短的可能就10~30秒就过期了
(我上面代码是没有做这个套机制的)
Java-前后端分离-单点登录(SSO二级跨域和跨一级域名)相关推荐
- 前后端分离单点登录SSO实现方案 淘宝、京东跨域获取Cookie、OAuth2、QQ客户端多种模式
演示Demo站点 http://sso.exrick.cn 开源版Github地址 https://github.com/Exrick/x-boot) 开发文档 https://www.kanclou ...
- Java前后端分离第三方登录_网站前后端分离情况下如何实现QQ微信等第三方登陆-Fun言...
前言 最近在弄第三方登录,实现起来很简单,就是调几个接口获取个人信息即可,详细了解:maven项目整合QQauth2.0第三方登录详细说明,然后因为本网站是前后端分离的,所以不能再回调接口那里直接跳转 ...
- Android+SpringBoot前后端分离实现登录注册
Android+SpringBoot前后端分离实现登录注册 一.登录 1.界面设计 2.Android端 (1)布局文件(activity_login) (2)java文件(LoginActivity ...
- 解决java前后端分离端口跨域问题
解决java前后端分离端口跨域问题 参考文章: (1)解决java前后端分离端口跨域问题 (2)https://www.cnblogs.com/mollie-x/p/10449686.html 备忘一 ...
- 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...
- 微信公众号支付java前后端分离开发
微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...
- 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...
- Django前后端分离实现登录验证码功能
Django前后端分离实现登录验证码功能 当下最流行最热门的开发方式当属前后端分离开发,分工也更加明确与专注,前端也是越来越难,几天不学习就跟不上节奏,一个月不学习可以好不夸张的说,你已经不适合这个行 ...
- 驾校分期-众筹项目java前后端分离项目vue(微信小程序+java前后端源码下载)
可以idea直接打开,mysql数据库项目,前后端分离项目vue,分期可自动设置,自动换算金额 驾校分期-众筹项目java前后端分离项目vue(微信小程序+java前后端源码下载)
最新文章
- RIPng 原理和实践
- Linux日志系统-05:案例1-实现临时日志文件滚动分割
- 2020-12-03 python 字典 key 和value 互换
- Spring定时器配置
- OPENCV-PYTHON将.GIF格式的图像转为PNG格式
- MySQL优化INSERT的性能
- Oracle启用、禁用角色
- Django(1.7 part1)
- 选择器、像素和百分比、颜色单位、文档流-css基础
- Java对接某地联通API接口02---API接口获取验证码
- 企业微信-通讯录管理-成员管理以及部门管理
- 服务器返回消息为空iOS
- 2021-2027全球与中国教育ERP套件软件市场现状及未来发展趋势
- QQ2010登录协议分析-目前可取得sessionkey
- SpringBoot打成jar包部署,Excel模板下载文件损坏,提示恢复问题处理
- 台式计算机上的fn键是哪个,笔记本上fn是哪个键fn键功能详解【方法详解】
- win10网络连接显示无网络但可以上网
- 特斯拉充电电流设置多大_特斯拉充电时间
- 批量提取微软必应图片
- 网易云信-IM即时通讯 微信小程序端实现
热门文章
- Exploring Simple Siamese Representation Learning
- 【网站】作为技术人可能要用到的IT技术网址清单,欢迎评论补充
- 开源语音Speex丨Windows环境配置和测试(一)
- 三维空间中直线间距离的计算
- python网络爬虫入门(三)—— 做个简陋的pixabay 图片下载器
- php源码怎样打包APP_HBuilder打包App方法
- 经纬度坐标转换为大地2000怎么转换_XOMAP-爬虫[4]-零代码实现将quot;地址quot;转换为“经纬度”坐标及“结构化地址”...
- java项目实现html转pdf的需求(支持中文和CSS样式)
- 移动前端开发屏幕宽度设置之viewport的深入理解
- php微信公众号群发,php实现微信公众号无限群发,php信公众群发