项目中登录业务流程的原理
一.项目中常见的登陆方式:
1. 账号密码登录
在用户点击登录时,收集
用户输入的账号和密码,发送给后端与数据库中的数据对比验证
,比较用户是否存在,密码是否正确;都 OK 就向用户发送登陆成功的信号和用户信息
2. 手机验证码登录、邮箱登录
用户点击发送验证码,前端就把手机号
传给后端,让后端生成一个随机数
,然后把手机号码和完整的短信内容发送给第三方短信平台,在第三方短信发送成功的回调里把手机号和随机数储存到数据库中
;用户收到短信后点击登录,前端收集手机号和验证码传给后端和数据库进行对比,验证成功就返回登录成功和用户信息等
3. 第三方登录(微信)
第三方账号登录都需要去申请授权
;
用户点击第三方登录时,前端调用接口获取第三方登录页面的链接地址
(拼接了后端加密过后的签名、登录成功后的回跳地址(redirect_uri)
等)
比如点击QQ登录的话,就直接跳转到后端返回的第三方登录链接
二.验证登录方式的方法
- Cookie + Session
- 首次登录验证成功之后,
后端
会创建一个Session 对象
并保存到缓存或者数据库里 - 然后在
响应登录接口的响应头
里,设置 Set-Cookie 字段,并把 SessionId 等信息写入进去,并设置过期时间,这些信息就是 Cookie,然后浏览器会保存这些 Cookie 信息 - 之后
再发送请求
的时候,如果当前域名有保存 Cookie 信息的话,浏览器会自动在请求头上添加 Cookie 字段,并带上保存的 Cookie 信息 - 然后后端接收到请求后,会把请求头中的 Cookie 信息提取出来和存在服务器的对应的 Session 信息作对比,如果一致就说明登录验证成功了,不需要再重复登录
- Token
- 首次登录验证成功之后,后端一般使用
JWT
将用户信息、签名等加密生成一串字符串,存到数据库并返回给前端 - 前端再存起来,存在
Cookie、SessionStorage、LocalStorage
都可以 - 之后再次请求时浏览器也不会默认携带,需要我们自己在
请求拦截器
里添加请求头,把 Token 信息带上 - 然后后端就拿到 Token 信息来查找数据库里有没有,如果有再执行查询数据库操作等返回前端请求的数据,因为设置了过期时间的话,时间到了
Redis
会自动就删掉数据库里的 Token,查询就不会有。当然也有人是开定时任务去删
特点:
- 更安全:因为可以不用发送 Cookie 了,能够·避免 CSRF 攻击`。也不需要操作 Session 了
- 多服务器方便共享:前后端代码文件等资源放在不同的服务器,请求时都能获取到正确的登录状态
三.单点登录-Single Sign On(SSO)
1.概念
指在多系统应用群中登录一个系统,那么其他所有系统都得到授权都无需再次登录;避免了一个一个登录、然后一个一个注销 简单点就是在一个应用注册的账号可以同时在多个应用上登陆
2.同域下实现SSO
比如百度(baidu.com)、百度网盘(pan.baidu.com)、百度贴吧(tieba.baidu.com)、百度地图(map.baidu.com).这些都是在同一域名下,要实现在百度上登录、注册成功后,在百度地图或百度贴吧上也能显示已登录
方法:
- 首先需要把 Cookie 设置给
顶级域
,这样子他下面所有的子域都可以访问他的 Cookie - 然后通过 Redis、Tomcat 等,都可以把 Session 设置成在这几个域名里共享
3.不同域下实现SSO
比如淘宝(taobao.com)、天猫(tmall.com)、支付宝(alipay.com)、阿里巴巴(1688.com)…
需要一个独立的能够统一管理或者共享这些状态信息的 认证中心(CAS),也就是SSO登录系统
4. JSON Web Token
JSON Web Token(JWT)是目前最流行的跨域认证解决方案
JWT 的原理:
服务器认证以后,生成一个 JSON 对象,发回给用户;以后用户与服务端通信的时候,都要发回这个 JSON 对象;服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名
JWT:
copy网站:
https://mp.weixin.qq.com/s/S56OCF85YyPI-HtotP6w_g
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
项目中登录业务流程的原理相关推荐
- 实际项目中的工作流工作原理
现在公司开发的项目中用到了工作流,在进入本公司之前本屌丝还没有接触过工作流,所以对工作流的工作原理一直很感兴趣,一直在默默的学习,终于有一天本屌突然看懂了源码(大雾,现在我觉得看懂了可能只是骗我自己, ...
- 动力节点crm项目中登录无响应记录
项目场景: 利用thymeleaf+ssm完成crm项目,使用jquery实现登录功能. 问题描述 在到达登录页面后,点击登录,页面没有跳转,并且没有出现报错,但是没有填写账号点击登录和密码有弹窗提示 ...
- ‘仿微信发表朋友圈’项目中登录功能的业务逻辑
登录功能 手机号验证码都通过后端验证后 返回用户数据 登陆成功 成功后 调用store中的setUser方法 store中的setUser方法 将后端返回的用户信息存储到localStorage中 同 ...
- 简单分析Java中审批业务流程业务原理
- vue项目实现登录/退出功能(包括token机制)
源码地址:https://gitee.com/cheng-xuyuan/blogWeb.git(请忽略这句) 一.登录业务的相关技术点 http是无状态的,为记录登录状态可通过cookie-sessi ...
- java学习笔记——众筹项目练习——项目中的忘记密码(密码找回)与记住我(自动登录)功能 和 返回json数据低版本浏览器显示下载问题的解决、众筹系统架构重构
忘记密码(密码找回) 忘记密码(密码找回)这个功能可以说是目前所有为别人提供服务的软件系统都具备的基础功能啦!很普遍,因为总 ...
- jsf登录注册页面_您将在下一个项目中使用JSF吗?
jsf登录注册页面 上周有一篇很棒的stackoverflow博客文章,主题是" Javascript框架的残酷生命周期" . 这篇文章是关于Javascript UI框架(ang ...
- python调用qq互联_Django项目中实现使用qq第三方登录功能
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
- vue 用户名重复验证_Vue项目中实现用户登录及token验证
在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下: 1.第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 2.后端收到请求,验证用户名和密码,验证成功,就给前端返回一个to ...
最新文章
- 04 pod setup 慢的问题
- java 基本的数据类型_Java的基本数据类型介绍
- easymock 图片_easy-mock的使用
- 9月7日学习内容整理:内置函数
- 供应商管理(Supplier Management)
- php mysqli::close()
- 让人惊叹的Johnson-Lindenstrauss引理:理论篇
- 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-tf.keras函数式API-08
- 在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动
- cameraraw预设_169个PS预设 ACR一键调出胶片效果 城市黑金效果 复古胶片色调
- bash编程初体验之if
- android studio for android learning (二)
- 目标检测YOLO系列论文对比
- python模块下载网址
- 线性规划问题的目标函数灵敏度分析
- java输出 JButton,Java JButton用法
- switch语句练习题
- GUI编程入门到游戏实战
- Python爬虫 | 图书馆公众号座位自动预约【从0到1】
- 学python还是matlab_先学matlab还是python-女性时尚流行美容健康娱乐mv-ida网