这是一段防爬代码块,我不介意文章被爬取,但请注明出处
console.log("作者主页:https://www.cnblogs.com/Go-Solo");
console.log("原文地址:https://www.cnblogs.com/Go-Solo/p/18328611");

最近公司搞新项目,有个需求登陆,简单记录一下:

  1. app 端实现一个登陆系统,七天内如果操作过,则不需要登陆,否则重新登陆
  2. 需要保证密码不泄漏
  3. 可通过邮箱、密码登陆
  4. 换绑邮箱需要验证老邮箱,再验证新邮箱
  5. 支持登出
  6. 更换密码需要验证邮箱
  7. 暂时支持邮箱注册

鉴权方案

前置知识导航:一口气说出前后端 10 种鉴权方案~

  1. cookie-session 方式,安卓端对于 cookie 支持并不是很好
  2. token 方式,其中 JWT 需要进行加解密操作,并且不支持登出,如果要做需要存储,本身 JWT 理念就是服务端不存储数据,这样就违背了理念,不是很想采用这种方式
  3. Oauth2.0,与第三方登陆有关,得看需求后续要不要接入,与要实现的内容并不耦合

综上,可以选择 token 方式,结合 1 进行一定的改造

具体方案

邮箱登陆、访问其他接口大致流程图

提供发送验证码接口

  1. 需要注意要做防刷逻辑
  2. 不同接口的类型验证码不可混用,发送后的验证码放入 redis 后,注意后续清除操作

提供验证验证码的接口

  1. 验证成功后颁发 email token,这个接口只能说明邮箱存在,并且本人操作,并不意味着邮箱对应着系统中的用户,用户是否存在需要在后续接口中做验证
  2. 注意需要清除 1 中生成的验证码

提供密码登陆接口

  1. 注意密码需要使用 RSA 公钥加密,避免泄漏密码比对通过后,生成随机 access token 和
  2. refresh token,access token 放入 redis 中,一小时自然过期,refresh token 存入数据库,有效期七天

网关

  1. access token、email token 的验证逻辑统一在中实现,验证通过后,把用户 id 放入 header 中,方便 controller 层和后续业务直接取
  2. 由于验证验证码的流程被剥离出来后,后续分步骤验证,换绑等操作得以实现,只需要更改网关验证流程即可

提供邮箱登陆接口

  1. 由于在网关中已经验证 email token 有效性,直接验证邮箱是否存在对应用户,颁发 token 即可
  2. 剩余逻辑与 3 一样

提供 token 刷新接口

  1. 由于 access token 是自然过期的,需要使用 refresh token 申请新 token,并且给 refresh token 续期到七天后

其他

  1. 请求需要使用 https 加密
  2. 密码使用私钥解密验证成功后,需要使用 BCrypt + salt 加密,以保证密码加密并且相同密码加密结果不一致。
  3. 使用 Redis 共享 session 解决后续扩展导致的共享问题

基于 token 的登陆系统的实现的更多相关文章

  1. 使用 AngularJS & NodeJS 实现基于token 的认证应用(转)

    认证是任何 web 应用中不可或缺的一部分.在这个教程中,我们会讨论基于 token 的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构 ...

  2. 使用 AngularJS & NodeJS 实现基于 token 的认证应用

      认证是任何Web应用中不可或缺的一部分.在这个教程中,我们会讨论基于token的认证系统以及它和传统的登录系统的不同.这篇教程的末尾,你会看到一个使用 AngularJS 和 NodeJS 构建的 ...

  3. 基于token与基于服务器的身份认证

    1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证. 我们与浏览器交互时,比如说登陆成 ...

  4. WebApi基于Token和签名的验证

    最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...

  5. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...

  6. 使用Json Web Token设计Passport系统

    >>Token Auth机制 基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中. 相比原始的Cookie+Session方式,更适合分布式系统的用户认证,绕 ...

  7. 基于Token的WEB后台认证机制

    几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...

  8. WebApi 基于token的多平台身份认证架构设计

    1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用 ...

  9. 玩一玩基于Token的 自定义身份认证+权限管理

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Toke ...

  10. Java实现基于token认证

    随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...

随机推荐

  1. UIController转为SwiftUI

    在UIKit转到SwiftUI的过渡时期中,项目中会遇到不得不用到二者混合使用的情景,苹果这时提供了相关API让iOSer更好地适应这个时期. UIViewControllerRepresentabl ...

  2. 【golang】json数据中复杂key的处理

    例1 type Transport struct { Time string Id int } func main() { //将struct的切片包装成json格式 var st []Transpo ...

  3. CF1523D Love-Hate

    抽象化题意: 一共有 \(m\) 个元素,给定 \(n\) 个集合,每个集合的元素不超过 \(15\) 个,求出一个元素个数最多的集合 \(S\) 是至少 \(\lceil \dfrac{n}{2} ...

  4. OpenSSL静态库交叉编译

    一.编译前环境准备 使用的内核:4.15.0-118-generic(命令:uname -r可以查看) 交叉编译器:aarch64-linux-gnu-gcc openssl源码:openssl-1. ...

  5. .NET 中使用RabbitMQ初体验

    在.NET Core中使用RabbitMQ 前言 逛园子的时候看到一篇.NET 学习RabbitMq的文章(视频地址和文章地址放在文章底部了),写的不错,我也来实现一下. 我是把RabbitMQ放在服 ...

  6. 莫名其妙的bug——Segmentation fault

    vscode出现Segmentation fault异常,但是没有问题报错(如上) 先说原因:cout << dp[m]; m没有输入,一个空定义(空指针) 难受啊,有一次cf因为这个bu ...

  7. WPF网格类型像素着色器

    由于WPF只能写像素着色器,没法写顶点着色器,所以只能在这上面做文章了 刚好有个纹理坐标TEXCOORD输入可用,而且值的范围是已知的0-1,左上角是原点,这就好办了 例子 索引 二分网格 使用cei ...

  8. 3568F-Docker容器部署方法说明

                 

  9. MyBatis插件:通用mapper(tk.mapper)

    简单认识通用mapper 了解mapper 作用:就是为了帮助我们自动的生成sql语句 通用mapper是MyBatis的一个插件,是pageHelper的同一个作者进行开发的 作者gitee地址:h ...

  10. 从 Helm 到 Operator:Kubernetes应用管理的进化

    Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识. 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubec ...