这是一段防爬代码块,我不介意文章被爬取,但请注明出处
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. Netty(二)线程模型

    1. Netty概述 虽然Java已经提供了NIO,但原生NIO仍存在部分问题: NIO的类库和API繁杂,使用麻烦.需要熟练掌握Selector.ServerSocketChannel.Socket ...

  2. python_8 拆包、内置函数和高阶函数

    一.查缺补漏 1. \t 子表符,用于对其二.拆包 1. 拆包:顾名思义就是将可迭代的对象如元组,列表,字符串,集合,字典,拆分出相对应的元素 2. 形式:拆包一般分两种方式,一种是以变量的方式来接收 ...

  3. 动环监控方案,为什么推荐79元全志T113-i国产平台?

    什么是动环监控系统? 通信电源及机房环境监控系统(简称"动环监控系统"),是对分布在各机房的电源柜.UPS.空调.蓄电池等多种动力设备,及门磁.红外.窗破.水浸.温湿度.烟感等机房 ...

  4. Mybatis-Plus最优化持久层开发

    Mybatis-plus:最优化持久层开发 一:Mybatis-plus快速入门: 1.1:简介: Mybatis-plus(简称MP)是一个Mybatis的增强工具,在mybatis的基础上只做增强 ...

  5. oeasy教您玩转vim - 42 - # 剪切进入

    ​ 剪切进入 回忆上节课内容 上次我们了解到了各种寄存器 :reg 无名寄存器"" 数字寄存器"0-"9 行内删除专用寄存器"- 指定寄存器" ...

  6. JAVA私有构造函数---java笔记

    在Java中,构造函数是一种特殊的方法,它用于初始化新创建的对象.当我们创建一个类的实例时,构造函数会自动被调用. 构造函数可以有不同的访问修饰符,如public.protected.default( ...

  7. 改善中国打开GitHub网站的速度

    您可以采取以下措施来改善您在中国打开GitHub网站的速度:1. 使用VPN:通过连接到VPN服务器,您可以避免中国政府对GitHub网站进行的封锁,从而获得更快的访问速度.2. 使用加速器:国内有很 ...

  8. JavaScript 监听组合按键

    JavaScript监听组合按键   by:授客 QQ:1033553122 1.   思路 如图,通过监听并打印键盘keydown事件,得到图示内容,观察发现, 当按下的组合键包含Ctrl键时,ct ...

  9. DuiLib的编译

    Duilib编译需要注意两点: 加入预处理器:WIN32;_DEBUG;_WINDOWS;UILIB_STATIC; 到这一步还是报错,报错的是DuiString  +=  这一行报错,还有Util这 ...

  10. 解锁 SQL Server 2022的时间序列数据功能

    解锁 SQL Server 2022的时间序列数据功能 SQL Server2022在处理时间序列数据时,SQL Server 提供了一些优化和功能,比如 DATE_BUCKET 函数.窗口函数(如 ...