基于 token 的登陆系统的实现
这是一段防爬代码块,我不介意文章被爬取,但请注明出处
console.log("作者主页:https://www.cnblogs.com/Go-Solo");
console.log("原文地址:https://www.cnblogs.com/Go-Solo/p/18328611");
最近公司搞新项目,有个需求登陆,简单记录一下:
- app 端实现一个登陆系统,七天内如果操作过,则不需要登陆,否则重新登陆
- 需要保证密码不泄漏
- 可通过邮箱、密码登陆
- 换绑邮箱需要验证老邮箱,再验证新邮箱
- 支持登出
- 更换密码需要验证邮箱
- 暂时支持邮箱注册
鉴权方案
前置知识导航:一口气说出前后端 10 种鉴权方案~
- cookie-session 方式,安卓端对于 cookie 支持并不是很好
- token 方式,其中 JWT 需要进行加解密操作,并且不支持登出,如果要做需要存储,本身 JWT 理念就是服务端不存储数据,这样就违背了理念,不是很想采用这种方式
- Oauth2.0,与第三方登陆有关,得看需求后续要不要接入,与要实现的内容并不耦合
综上,可以选择 token 方式,结合 1 进行一定的改造
具体方案
邮箱登陆、访问其他接口大致流程图
提供发送验证码接口
- 需要注意要做防刷逻辑
- 不同接口的类型验证码不可混用,发送后的验证码放入 redis 后,注意后续清除操作
提供验证验证码的接口
- 验证成功后颁发 email token,这个接口只能说明邮箱存在,并且本人操作,并不意味着邮箱对应着系统中的用户,用户是否存在需要在后续接口中做验证
- 注意需要清除 1 中生成的验证码
提供密码登陆接口
- 注意密码需要使用 RSA 公钥加密,避免泄漏密码比对通过后,生成随机 access token 和
- refresh token,access token 放入 redis 中,一小时自然过期,refresh token 存入数据库,有效期七天
网关
- access token、email token 的验证逻辑统一在中实现,验证通过后,把用户 id 放入 header 中,方便 controller 层和后续业务直接取
- 由于验证验证码的流程被剥离出来后,后续分步骤验证,换绑等操作得以实现,只需要更改网关验证流程即可
提供邮箱登陆接口
- 由于在网关中已经验证 email token 有效性,直接验证邮箱是否存在对应用户,颁发 token 即可
- 剩余逻辑与 3 一样
提供 token 刷新接口
- 由于 access token 是自然过期的,需要使用 refresh token 申请新 token,并且给 refresh token 续期到七天后
其他
- 请求需要使用 https 加密
- 密码使用私钥解密验证成功后,需要使用 BCrypt + salt 加密,以保证密码加密并且相同密码加密结果不一致。
- 使用 Redis 共享 session 解决后续扩展导致的共享问题
基于 token 的登陆系统的实现的更多相关文章
- 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)
认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...
- 使用 AngularJS & NodeJS 实现基于 token 的认证应用
认证是任何Web应用中不可或缺的一部分.在这个教程中,我们会讨论基于token的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构建的 ...
- 基于token与基于服务器的身份认证
1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证. 我们与浏览器交互时,比如说登陆成 ...
- WebApi基于Token和签名的验证
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- 使用Json Web Token设计Passport系统
>>Token Auth机制 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中. 相比原始的Cookie+Session方式,更适合分布式系统的用户认证,绕 ...
- 基于Token的WEB后台认证机制
几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- WebApi 基于token的多平台身份认证架构设计
1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用 ...
- 玩一玩基于Token的 自定义身份认证+权限管理
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...
- Java实现基于token认证
随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...
随机推荐
- centos8使用nmcli实现bond
#添加bonding接口 nmcli con add type bond con-name bond0 ifname bond0 mode active-backup ipv4.method manu ...
- 十大java应用服务器(web server)总结
java应用服务器(web server),是指运行java程序的web应用服务器软件,不包括nginx.Apache等通用web服务器软件. 一.Tomcat Tomcat是Apache 软件基金会 ...
- SPI 协议学习
SPI 协议学习 背景 2年之前学过SPI,但是因为现在太久没用.基础知识不牢靠(对自己的面试表现不满意):所以重新整理了一遍. SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据 ...
- ZYNQ:Linux添加I2C-RTC驱动
硬件情况 使用的是DS1338这款RTC时钟芯片,I2C总线对应到PS端的I2C1. 配置 内核 添加有关的驱动: 因为DS1338用的驱动与DS13307相似,一找发现是同一个配置. CONFIG_ ...
- uboot 添加 自定义命令
--- title: uboot-uboot 添加 自定义命令 date: 2020-05-13 16:51:38 categories: tags: - uboot - cmd - config - ...
- [python] Python日志记录库loguru使用指北
Loguru是一个功能强大且易于使用的开源Python日志记录库.它建立在Python标准库中的logging模块之上,并提供了更加简洁直观.功能丰富的接口.Logging模块的使用见:Python日 ...
- Centos7安装Redis详细步骤(配置开机自启)
Redis 获取redis安装包使用tar命令解压. $ tar -zxzf redis-6.2.6.tar.gz 编译和安装redis 进入redis目录,执行make编译. $ cd redis- ...
- Mac 设置多个版本JDK
控制台: p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: ...
- c 语言学习第五天
break 语句 在循环体中使用 break,可以跳出循环 打印 10 以内的数. #include<stdio.h> int main(){ int i,j = 20; for(i = ...
- 合合TextIn - 大模型加速器
TextIn是合合信息旗下的智能文档处理平台,在智能文字识别领域深耕17年,致力于图像处理.模式识别.神经网络.深度学习.STR.NLP.知识图谱等人工智能领域研究.凭借行业领先的技术实力,为扫描全能 ...