基于 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认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...
随机推荐
- Qt 应用程序中自定义鼠标光标
在 Qt 应用程序中,你可以自定义鼠标光标.你可以使用 `QCursor` 类来设置不同类型的鼠标光标,比如内置样式或者自定义的图片.以下是一些使用示例: 使用内置光标样式 Qt 提供了一些内置的光标 ...
- Blender练习——SciFi枪械.md
Blender练习--SciFi枪械 一.基本操作 常用快捷键 E 挤出 B 倒角,中途可通过滚轮或S来调整细分 Alt+点选 循环选择 Ctrl Alt+点选 并排选择 F 补面,比如一个碗口,将碗 ...
- [翻译].NET 8 的原生AOT及高性能Web开发中的应用[附性能测试结果]
原文: [A Dive into .Net 8 Native AOT and Efficient Web Development] 作者: [sharmila subbiah] 引言 随着 .NET ...
- arm 移植 lighttpd + CGI 配置
--- title: arm 移植 lighttpd + CGI 配置 EntryName: porting-lighttpd-on-arm-and-make-cgi-config date: 202 ...
- Java 将Markdown文件转换为Word和PDF文档
Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择.但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的 ...
- LVGL一键打包图片工具,全部图片打包成一个bin文件,支持nor flash XIP模式下直接访问数据显示
最近做工程项目,需要用到LVGL,但是搜了很长时间没有看到合适的图片打包工具,大多都是生成数组或者单个的bin文件,这样烧录到nor flash很麻烦 后来看到一篇博客,博主的想法与我类似,不过他后面 ...
- Linux如何安装PHPMyAdmin
1,我们要以root帐号登入 . 2,PHP支持模块安装.在CentOS操作系统安装完毕后,其实PHP支持模块并没有安装上去,如果想使用PhpMyAdmin,首先需要安装PHP支持模块,我们需要两个P ...
- Python 标准类库-因特网数据处理之Base64数据编码
该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能.它为RFC 3548中指定的编码提供编码和解码功能.定义了Base16.Base32和Base64算法,以及事实上的 ...
- Python 华为云OSS建桶与文件上传下载删除及检索示例
华为云OSS建桶与文件上传下载删除及检索示例 实践环境 运行环境: Python 3.5.4 CentOS Linux release 7.4.1708 (Core)/Win10 需要安装以下类库: ...
- 🚀RabbitMQ+redis+Redisson分布式锁+seata实现订单服务
引言 订单服务涉及许多方面,分布式事务,分布式锁,例如订单超时未支付要取消订单,订单如何防止重复提交,如何防止超卖.这里都会使用到. 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性, 使用 ...