首页 > 其他分享 >基于 token 的登陆系统的实现

基于 token 的登陆系统的实现

时间:2024-07-28 16:07:28浏览次数:10  
标签:基于 验证 接口 密码 token 登陆 邮箱

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

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

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

鉴权方案

  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,登陆,邮箱
From: https://www.cnblogs.com/w-blogg/p/18328093

相关文章

  • 基于Hive的大数据分析系统
    1.概述在构建大数据分析系统的过程中,我们面对着海量、多源的数据挑战,如何有效地解决这些零散数据的分析问题一直是大数据领域研究的核心关注点。大数据分析处理平台作为应对这一挑战的利器,致力于整合当前主流的各种大数据处理分析框架和工具,以实现对数据的全面挖掘和深入分析。本......
  • JUC并发编程:基于Condition实现一个阻塞队列
    Condition方法概述await():当前线程进入等待状态,直到被通知(siginal)或中断【和wait方法语义相同】。awaitUninterruptibly():当前线程进入等待状态,直到被通知,对中断不敏感。awaitNanos(longtimeout):当前线程进入等待状态直到被通知(siginal),中断或超时。awaitUnit......
  • 基于JSP的沙县小吃点餐系统
    你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:JSP技术工具:IDEA/Eclipse、Navicat、Maven系统展示首页管理员功能界面用户功能界面前台首页功能界面摘要随着社会的发展,信息化时代的优势被各行各业所利用,计算机的......
  • 基于Libero的工程创建
    基于Libero的工程创建第一步:双击进入到工程界面,编写项目详细信息。ProjectName:标识您的项目名称。不要使用空格或保留的Verilog或VHDL关键字。ProjectLocation:在磁盘上标识您的项目位置。Description:关于您的设计和项目的一般信息。PreferredHDLType:将HDL类型设置......
  • 为什么不能基于返回类型进行重载
    函数重载(FunctionOverloading)是面向对象编程(尤其在C++、Java等语言中)中的一个重要特性,它允许在同一个作用域内定义多个同名函数,只要这些函数的参数列表(参数的数量、类型、顺序)不同即可。函数重载具有其独特的优点和缺点,以下是对这些方面的概述:优点代码清晰:通过函数重载,可以......
  • [0298]基于JAVA的保健按摩智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的保健按摩智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当前社会环境下,随着人们对健康日益增长的需求以及生活节奏的加快,保健按摩行业呈现出蓬勃发展的态势。然而,传统的保健按摩企业......
  • [0297]基于JAVA的保健品进销存智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的保健品进销存智慧管理系统的设计与实现指导老师(一)选题的背景和意义【开题报告背景】在当今社会,随着国民健康意识的提升和生活质量追求的增长,保健品市场呈现出持续繁荣的发展态势。然而,伴随着......
  • [0289]基于JAVA的供应商订单智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的供应商订单智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义:随着信息技术的快速发展和广泛应用,企业在供应链管理中对效率、精准度和智能化的要求日益提高。特别是在企业采......
  • 手把手搭建im即时通讯app源码(基于PHP即时通讯源码聊天系统协议)uniapp全开源框架
    即时通讯(InstantMessaging,IM)系统是现代互联网应用中不可或缺的一部分,它允许用户进行实时的文本、语音、视频交流。随着技术的发展,IM系统的功能越来越丰富,如红包、客服、禁言等。本文将深入探讨如何使用PHP语言结合WebSocket、UniApp等技术开发一个功能完备的即时通讯系......
  • 万亿token!史上最大多模态数据集诞生
    开源多模态大模型或将开始腾飞。点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com值此Llama3.1占领各大头条之际,又突然冒出了另一个也非常重要的发布——一个规模空前的开源多模态数据集。对大模型来说,数据集的重要性无需多言,甚至可以说没有......