登录鉴权

2023-10-27

注册登录鉴权

1.1.用户注册

前台需要给我们传递用户名、密码、手机号、手机验证码。验证用户前台传过来的数据是否符合规范,我们使用的Hibernate Validator框架实现的服务端表单校验。短信验证码这块,我们采用的阿里的大于短信接口来做的,我们单独搭建了一个短信微服务,发送的短信请求通过MQ消息由短信微服务消费,进行短信发送。密码我们使用的是Spring提供的BCryptPasswordEncoder加密算法,分成加密和验证两个过程:

  • 加密:算法会对明文密码使用UUID随机生成一个salt,使用salt结合密码来加密,得到最终的密文。

  • 验证密码:需要先拿到加密后的密码和要验证的密码,根据已加密的密码来推测出salt,然后利用相同的算法和salt对要验证码的密码加密,与已加密的密码对比即可。

短信验证码的有效期为30分钟,为了验证短信验证码的时效性,我们保存到了redis中,手机号作为key,验证码作为value,设置有效期为30分钟。另外为了防止恶意攻击,我们限制一个手机号1分钟之内只能发送一次验证码,这个也是通过redis来实现的,手机号拼接"_yes"为key,验证码为value,设置有效期为1分钟。为了防止机器恶意调用验证码接口,我们这个地方使用图形验证码来进行限制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9Wh8WaR-1608619936313)(assets\6.png)]

1.2.用户登录

使用JWT+RSA加密技术实现了无状态登录。我们单独搭建了一个校验微服务来进行校验,验证用户名和密码的话需要通过feign组件来调用用户魏服务来进行查询,另外的话,我们使用JWT+RSA加密生成一个token返回给前台,写到cookie中。

(img-8LbV4Usa-1608619936317)(assets\1.png)]

1.3.校验登录

在页面created生命周期函数中就调用校验登录的接口。接口的主要逻辑为:

  • 去redis中验证token是否存在redis中,如果存在说明,此token失效了,返回401
  • 取cookie中的token信息,使用公钥进行解密操作,获取用户信息进行返回
  • 如果前两步正确无误,但是token的有效期小于15分钟则进行token的续签操作,即重新生成一个token,写入cookie中即可

(img-g6v3vwaX-1608619936318)(assets\2.png)]

1.4.登出操作

  • 把JWT存入黑名单,就是把token放入redis中,设置一个过期时间(token的有效剩余时间)
  • 删除客户端cookie

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaSRvF8Z-1608619936320)(assets\3.png)]

1.5.网关登录控制

  • 1)获取用户的登录凭证jwt
  • 2)解析jwt,获取用户身份
    • 如果解析失败,证明没有登录,返回401
    • 如果解析成功,继续向下
  • 3)根据身份,查询用户权限信息
  • 4)获取当前请求资源(微服务接口路径)
  • 5)判断是否有访问资源的权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fc0zeBLC-1608619936322)(assets\4.png)]

2.JWT的3W1H

2.1.是什么(what)?

JWT,全称是Json Web Token,是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;JWT包含三部分数据:①Header头部:声明这是JWT以及选用的签名算法;②payLoad:载荷,就是有效数据,我们存放了jwt的id、用户信息、过期时间;③Signature:签名,是整个数据的认证信息。一般根据前两步的数据,再加上服务的的密钥(secret)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性。

2.2.为什么(why)?

我们使用的springCloud搭建的微服务架构,想使用JWT来做无状态登录,使用JWT+RSA加密算法来生成token,客户端保存token信息,服务器端不再保存用户登录状态。

2.3.在哪用(where)?

一般用于授权和身份认证。

2.4.怎么用(how)?

(img-FmYAqHNl-1608619936323)(assets\5.png)]

  • 引入maven的依赖
  • 创建一个JWT的工具类
    • 使用私钥加密token
    • 公钥解密token
    • 获取token中的User信息
    • 获取token中的载荷信息

3.RSA的3W1H

3.1.是什么?

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字缩写:RSA。是一种非对称加密算法。

3.2.为什么?

加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法。用RSA的目的就是对数据进行加密,防止信息泄露。

3.3.在哪用?

用于对不能明文传输或者明文保存的信息进行加解密。

3.4.怎么用?

基本原理:同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端

  • 私钥加密,持有私钥或公钥才可以解密
  • 公钥加密,持有私钥才可解密

4.cookie被禁用的解决方案

一.在URL后面手动拼接sessionid

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

二.使用响应对象HttpServletRequest中的encodeURL(String path)方法实现jsessionid的自动拼接

5.如何解决cookie被盗用问题?

答:cookie被盗用的可能性主要包括下面几种:

  • XSS攻击:这个可以再前端页面渲染时对 数据做安全处理即可,而且我们的cookie使用了Httponly为true,可以防止JS脚本的攻击。
  • CSRF攻击:
    • 我们严格遵循了Rest风格,CSRF只能发起Get请求,不会对服务端造成损失,可以有效防止CSRF攻击
    • 利用Referer头,防盗链
  • 抓包,获取用户cookie:我们采用了HTTPS协议通信,无法获取请求的任何数据
  • 请求重放攻击:对于普通用户的请求没有对请求重放做防御,而是对部分业务做好了幂等处理。运行管理系统中会对token添加随机码,认证token一次有效,来预防请求重放攻击。
    我们采用了HTTPS协议通信,无法获取请求的任何数据
  • 请求重放攻击:对于普通用户的请求没有对请求重放做防御,而是对部分业务做好了幂等处理。运行管理系统中会对token添加随机码,认证token一次有效,来预防请求重放攻击。
  • 用户电脑中毒:这个无法防范。控制自己
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

登录鉴权 的相关文章

  • 统计难题

    链接 http acm hdu edu cn showproblem php pid 1251 Problem Description Ignatius最近遇到一个难题 老师交给他很多单词 只有小写字母组成 不会有重复的单词出现 现在老师要
  • 网络编程架构简介

    软件开发架构 什么是软件开发架构 实际编写项目时 不会把所有代码都写在同一个项目文件中 在编写项目前 一般要先按照不同的功能分开写代码 像这样按照不同功能将代码写在不同的区域就是软件开发架构 软件开发架构分类 1 c s架构 c clien
  • 新人毕业,老人跳槽:5位同学简历中的问题

    新人毕业 老人跳槽 2位同学简历中的15个问题 又是凤凰花开 新人毕业 老人跳槽的季节了 最近 有2位同学有跳槽的意向 趁着晚上和周末 写写简历 这2位同学 很看得起我 让我帮忙看看简历 我反复看了简历 发现了不少问题 下面主要列出一些 排
  • AIGC数据库工具-阿里开源Chat2DB

    前言 今天无意间发现了一个AIGC数据库工具 chat2DB 重点 阿里开源 其设计产品的思想给了我很多灵感 故记录一下 并分享给大家 概述 Chat2DB 是一款有开源免费的多数据库客户端工具 支持windows mac本地安装 也支持服
  • Linux设置开机启动和定时任务crontab

    一般来说Ubunt会默认安装crontab工具 特别注意 环境变量crontab读取不到的 一定在里面不要有环境变量 入口 入口2 入口3 如果你需要输入密码可以在脚本中这样写 bin bash echo home pwd pwd sudo
  • AS/400上的FTP

    3 1 1 1 AS 400上的FTP FTP是如何工作的 FTP是基于客户 服务器模型而设计的 客户和服务器之间利用TCP直接连接 与其它客户 服务器模型不同的是 FTP客户与服务器之间是要建立双重连接 一个是控制连接 一个是数据连接 建
  • DS证据理论用法

    一 基本概念 全名 DS 证据理论 Dempster Shafer envidence theory 也称为DS理论 是一种处理不确定性问题的完整理论 主要作用 Dempster合成规则 将多个主体 可以是不同的人的预测 不同的传感器的数据
  • DATAX快速上手非常详细

    前言 博主在工作的过程中有一天公司决定将数据迁移的新的项目上去 当我发现数据库中的表大于有4000多张表的时我顿时懵了下 这数据迁移人力物力消耗的也太大了吧 看DataX的设计 所以我们可以借助阿里云开源的DataX来解决这个问题 看完这篇
  • 基于客户端与服务器的管理系统,基于客户端和服务器的点菜系统.doc

    基于客户端和服务器的点菜系统 基于客户端和服务器的点菜系统 引论 网络技术的不断发展 传统的点菜方式发生越来越多的变化 通过现代化的信息技术 构建高效的 共享的信息化平台 建立以服务台为管理中枢的一体化管理网络 实现对餐饮行业进行系统而全方
  • 图解GPT-2

    这是我翻译这位大佬的第二篇文章了 翻译授权见最后 其他工作 图解transformer The Illustrated Transformer 图解BERT ELMo NLP中的迁移学习 The Illustrated BERT ELMo
  • Docker 运行时资源限制

    Docker 运行时资源限制 Docker 基于 Linux 内核提供的 cgroups 功能 可以限制容器在运行时使用到的资源 比如内存 CPU 块 I O 网络等 内存限制 概述 Docker 提供的内存限制功能有以下几点 容器能使用的
  • 2.4.4 Profile基本参数

    最后更新2021 07 18 通过HMC GUI界面选择一个分区 然后选择ConfigurationManage Profiles或者用鼠标点击分区名右侧箭头进入分区菜单选项 也可进入Profile管理页面 图 234 分区Profile管
  • 工资计算(C++)

    问题描述 有一个工厂有三类人 固定工资工人A 计件工人B 计时工人C 构建基类 工厂员工Worker类 包括三个成员数据 名字name 字符串string 住址address 字符串string 工资salary long int 包括成员
  • 即时通讯源码/im源码uniapp基于在线聊天系统附完整搭建部署教程

    即时通讯im源码 Instant Messaging System 是个基于uniapp项目 我们在其中使用了许多uniapp服务 这个纡AWS云的项目 我们为想要学习uniapp和云计算的学生开发 我们将提供部署说明以及uniapp即时消
  • Flutter状态管理之Provider的使用

    当App的复杂性发展到一定程度 经常会出现一个页面中不同深度的子Widget需要共享访问同一个数据状态 甚至不同页面要共享同一个状态 这时我们就会想到InheritedWidget InheritedWidget是 Flutter 中非常重
  • java实现二维码生成功能

    1 由来 由于现在对二维码的使用比较多 正好我在项目里面也使用到了 所以写篇博客记录一下 2 引入依赖
  • 选择刷脸支付便是选择明日支付主流

    刷脸支付国家政府支持发展 两大支付巨头强力推广 大众期盼投入 未来几年的支付方式发展主题 都将以刷脸支付为主旋律 大势所趋下 刷脸支付项目将成为最抢手的支付项目 选择刷脸支付 便是选择明日支付主流 移动支付市场洗牌 未来 刷脸支付定天下 现
  • vscode中mmgeneration的分布式训练的调试文件设置

    受知乎博主的启发 没弄软连接 直接把launch py的路径放到了program参数中了 还需要把train py中的参数设置为默认值 launch json文件的代码 使用 IntelliSense 了解相关属性 悬停以查看现有属性的描述
  • MYSQL存储结构

    前言 需要提前了解B树 B 树特性 目录 MYSQL的数据结构 主索引 辅助索引 通过索引查询数据时出现的关键词 MYSQL的数据结构 MYSQL数据选用B 树结构存储数据 示例表 create table users id int nam
  • Delphi 如何GET/POST 调用HTTP请求

    转载地址 https www cnblogs com limingliyu archive 2016 07 03 5638966 html HTTP请求的GET方法 procedure GetDemo var IdHttp TIdHTTP

随机推荐

  • Postman使用_加密操作

    MD5加密 let token CryptJS MD5 文本内容 toString SHA256加密 let token CryptJS SHA256 文本内容 toString
  • Angular的后院:组件依赖关系的解决

    by Dor Moshe 通过Dor Moshe Angular的后院 解决 组件依赖关系 Angular s Backyard The Resolving of Components Dependencies This article o
  • mac 安装 JDK

    下载jdk rpm jdk 8u65 macosx x64 dmg 按照提示安装 实标上 我们只是把JDK1 8的文件复制到操作系统上 但是我们如果要在terminal终端上使JAVA命令 还有让其实应用知道JDK1 8环境的存在 那我们还
  • echart的使用

    一 echarts的通用配置 想要设置图表的在窗口的位置 必须设置图表盒子的位置 也必须设置盒子的长度和宽度来容纳echart图像 1 title属性 1 文字样式textStyle 2 标题边框 borderWidth borderCol
  • 宝塔面板SSL证书文件存放目录位置在哪里?

    宝塔面板SSL证书文件存放目录位置在哪里 宝塔面板网站安装SSL证书后 SSL证书文件存放在哪那个目录下 赵一八笔记分享宝塔面板SSL证书文件存放目录位置 宝塔SSL证书所在目录 SSL证书目录 www server panel vhost
  • 第二章——开始学习C++

    进入C 首先介绍一个显示消息的简单C 程序 不同于以往的 Hello world include
  • Matter 仓库介绍

    1 connectedhomeip spechttps github com CHIP Specifications connectedhomeip spec 此仓库为Matter规范技术文档 specifications 采用 Ascii
  • cmd如何返回上一级目录,如何进入其他文件目录

    当我们打开cmd或者composer运行命令时都会进入一个默认文件目录 那么cmd该如何返回上一级目录 和如何进入其他文件目录运行命令呢 具体方法如下图所示 1 在默认的命令后加 cd 即可返回上一级目录 2 cmd进入其他文件目录 2 1
  • 基于.net平台常用的框架整理

    分布式缓存框架 Microsoft Velocity 微软自家分布式缓存服务框架 Memcahed 一套分布式的高速缓存系统 目前被许多网站使用以提升网站的访问速度 Redis 是一个高性能的KV数据库 它的出现很大程度补偿了Memcach
  • 若依后台管理系统学习

    前端系统是指运行在浏览器或者移动设备上的用户界面层 它负责与用户交互 展示数据 调用后端服务等 前端系统的架构设计需要考虑以下几个方面 前端系统在整个系统中的位置和关系 你需要明确前端系统与后端服务 数据库 第三方接口等的架构上的关系 业务
  • requests模块----这是一个强硬的手段,有多强呢?看看你就知道了

    目录 requests的作 发送简单的get请求 发送带header的请求 发送POST请求 cookies参数的使 cookie和session区别 使 代理 设置请求超时时间 请求SSL证书 开始了 requests模块简单介绍 1 r
  • Java8基础之Serializable接口

    Serializable接口介绍 Serializable 是 java io 包中定义的 用于实现 Java 类的序列化操作而提供的一个语义级别的接口 Serializable 序列化接口没有任何方法或者字段 只是用于标识可序列化的语义
  • shift算法的实现

    ok 接上文 咱们一个一个的来编写main函数中所涉及到所有函数 这也是本文的关键部分 cpp view plain copy print 下采样原来的图像 返回缩小2倍尺寸的图像 CvMat halfSizeImage CvMat im
  • ***总结:在linux下连接redis并进行命令行操作(设置redis密码)

    root iZ254lfyd6nZ cd root iZ254lfyd6nZ ls bin boot dev etc home lib lib64 lost found media mnt opt proc root sbin selinu
  • 通信算法之184: 物理层DPD/CFR/LNA/PA

  • 机器人教育在STEM课程中的设计研究

    在美国 科学 技术 工程和数学 STEM 教育被视为确保国家成功未来的重要一步 基于现实世界中的问题开发的STEM课程 可以使课程更贴近学生和教师 对于更优质的STEM教育的迫切要求主要基于以下因素的考虑 许多职业现在需要一支能够参与STE
  • 啊哈C——学习6.4陶陶摘苹果

    2015年2月5日22 02 03 1 陶陶家的院子里有一颗苹果树 每到秋天树上就会结出10个苹果 苹果成熟的时候 陶陶就会跑去摘苹果 陶陶有个30cm高的板凳 当她不能直接用手摘到苹果是 就会踩到板凳上再试试 现在一直10个苹果到地面的高
  • 华为OD机试 -百钱买百鸡问题(C++ & Java & JS & Python)

    描述 公元五世纪 我国古代数学家张丘建在 算经 一书中提出了 百鸡问题 鸡翁一值钱五 鸡母一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁 鸡母 鸡雏各几何 现要求你打印出所有花一百元买一百只鸡的方式 输入描述 输入任何一个整数 即可运行程序 输
  • 树莓派4b配置OpenWrt联网

    文章目录 前言 一 下载固件 二 配置wan口 三 简单介绍 1 修改无线名称 设置密码 2 下载软件包 总结 前言 树莓派4b内置wifi模块 加一个千兆网口 好像有一种办法 通过无线wifi链接其他wifi通网 然后把这个网口作为lan
  • 登录鉴权

    注册登录鉴权 1 1 用户注册 前台需要给我们传递用户名 密码 手机号 手机验证码 验证用户前台传过来的数据是否符合规范 我们使用的Hibernate Validator框架实现的服务端表单校验 短信验证码这块 我们采用的阿里的大于短信接口