CRM——验证码(JWT技术)、接口资源鉴权
目录
- 1、登录
- 1.1登录验证
- 1.2JWT简介
- 是什么
- 什么用
- 组成
- 1.3生成JWT
- 1.4 使用JWT生成token
- 2、接口资源鉴权
1、登录
- 前端会保存用户的UUID(后端自动生成的作为验证码的标识)和通过Base64转码的验证码图片,redis里会保存UUID和验证码的键值对。并设置过期时间。
- 调用登录接口时,前端会返回用户登录信息(用户名、密码、验证码、验证码对应的uuid)给后端。
- 根据用户传入的UUID在reids里查找获取验证码的值,在后端对验证码的值进行校验。
如果验证码不存在返回前端验证码过期信息,如果验证码存在立刻删除redis里面的键值。- 校验完验证码再开始根据用户名查询用户及对应的密码。
authenticationManager处理身份验证请求的管理器,它的实现通常会返回一个包含更丰富信息的Authentication作为应用程序使用的主体(许多身份验证提供程序将创建一个UserDetails对象作为主体)。authenticationManager.authenticate(Authentication authentication)会尝试对传递的Authentication对象进行身份验证,如果为true,则返回完全填充的Authentication对象。通过new UsernamePasswordAuthenticationToken(Object principal, Object credentials)【一般是username和password】的返回值是true还是false判断。Authentication对象的属性为true,则安全拦截器不进行身份验证。
authentication.getPrincipal()在使用用户名和密码的身份验证请求的情况下,这是用户名,密码同理。
- Spring Security存储用户信息,信息会被封装到Authentication对象中。UserDetailsServiceImpl类中实现相应的用户判断。SecurityUtils里会判断密码是否相同。
- 将生成的JWT token返回给前端,用户对象存储到redis中。
1.1登录验证
获取验证码
- 随机生成一个uuid,通过和另外标识是验证码的字符串连接起来组成verifyKey。
- 通过Producer接口中的captchaType变量和配置文件中的指定信息来匹配验证码是数学运算还是文本类型。
- 通过substring中的相关格式分割提取验证码的capStr、code。
- 通过captchaProducerMath.createImage(capStr)将验证码导成图片格式。
- 通过setCacheObject()方法将verifyKey、code、过期时间及时间单位存入缓存。redis里将uuid作为key值传入。
- 通过ImageIO将图片传入前端。请求头中保存uuid以及验证码图片的字节文件。
用户验证
- 首先,除非Authentication将authentication的属性设置为true,否则它会由它遇到的任何安全拦截器进行身份验证。
- 已知 new UsernamePasswordAuthenticationToken(username, password)。【UsernamePasswordAuthenticationToken旨在简单地显示用户名和密码
】会返回true或false。当返回true,则拦截器不拦。
1.2JWT简介
是什么
Json web token,通过数字签名的方式,以json为载体,在不同的服务之间安全的传输信息的一种技术。
什么用
使用在授权认证的过程中,一旦用户登录,后端返回一个token给前端。之后前端向后端发送的每一个请求都需要包含这个token,后端在执行方法前会校验这个token,校验通过后才执行具体的业务逻辑。
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>
组成
token=header(头信息)+payload(用户信息)+signature(签名)
头信息:主要声明加密算法
- 然后将header进行base64加密,构成第一部分
用户信息(载荷):主要存储用户的姓名等信息json格式
- 对json进行base64加密,得到JWT第二部分
签名:首先生成一个随机密钥进行加密,将“标头”和“载荷”(均已加密过)用“.”拼接成一个message,使用header声明的加密方式对message和加密后的密钥进行加盐加密,得到第三部分。
base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐加密,然后就构成了jwt的第三部分,每个部分直接使用"."来进行拼接。
1.3生成JWT
调用api封装header、payload、signature三部分信息。
// 使用JWT自带构造器构造一个JWT
Jwts.builder();
// 使用setHeaderParam()封装header属性//使用claim()封装payload属性//使用setExpiration设置超时时间//使用signWith()构造signature部分,需要提前声明一个全局秘钥
// 设置加密使用的密钥及加密算法,加密算法可以不指定,系统自动选择一个合适的//使用compact方法连接
1.4 使用JWT生成token
//通过login方法得到获得可以设置进token的载荷即用户信息
public String login(String username,String password,String code,String uuid);
//调用String createToken(LoginUser loginUser)方法得到claims即用户信息以map格式存储//调用String createToken(Map claims)方法通过JWT成功构造出token
2、接口资源鉴权
利用Security里的注解==@PreAuthorize==,加载Controller层需要接口权限的接口上,对于公共的接口人人都可以访问的接口就不需要加载这个注解
@PreAuthorize("@ss.hasPermi('clues:clue:list')")
//ss是在自定义权限实现类的中Service注解里的名称
//hasPermi方法:验证用户是否具备某权限
CRM——验证码(JWT技术)、接口资源鉴权相关推荐
- 开放api接口平台鉴权怎么做?
我们的接口需要提供给外部第三方系统去调用,那么在做开放接口安全管理的时候先要想明白几点,为什么要做安全,有哪些地方要做安全? 解决方式: (1)优化方式一:数据加密 调用方将调用方身份信息和密码通过明 ...
- jwt token 过期刷新_如何在SpringBoot中集成JWT(JSON Web Token)鉴权
这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...
- springcloud微服务体系(一)— 基于security和jwt实现认证及鉴权服务
文章目录 需求 知识点讲解 方案 SpringSecurity 具体实现 业务流程 代码 认证服务 鉴权服务 配置 需求 1.RESTfull风格的鉴权服务(路线相同的情况下根据请求方式鉴别访问权限) ...
- SpringBoot中使用Shiro和JWT做认证和鉴权
最近新做的项目中使用了shiro和jwt来做简单的权限验证,在和springboot集成的过程中碰到了不少坑.做完之后对shiro的体系架构了解的也差不多了,现在把中间需要注意的点放出来,给大家做个参 ...
- postman调试http接口挑战鉴权Authorization
我在公司有postman调接口的时候,填写了正确的请求路径和json数据,但是还是报401权限错误!!!!!后来我在文档上找到了需要json+带鉴权信息,但是还是没办法解决,最后问了第三方,需要二次鉴 ...
- 微信小程序 授权登录+手机发送验证码+jwt验证接口(laravel8+php)
参考博客 小程序授权登录并 laravel7(laravel8) token 应用 - 王越666 - 博客园 微信小程序sku商品规格选择器 - 简书 微信小程序 和 laravel8 实现搜索后分 ...
- java 鉴权_我爱java系列之---【JWT实现微服务鉴权(一)】
JWT介绍 JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签 ...
- JWT 实现微服务鉴权
一.JWT JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签 ...
- 深入浅出:JWT(JSON Web Token)鉴权
索引: 第一部分 基本概念 第二部分 使用流程 第三部分 实现代码 第一部分 基本概念 JWT就是一个字符串,经过加密处理与校验处理的字符串,由三个部分组成.基于token的身份验证可以替代传统的co ...
最新文章
- js实现图片轮播(终结版)
- Return to the basic - 继承(Inheritation)
- 计算机与网络应用教材格式化,《计算机与网络应用》正式稿.docx
- linux手动同步文件命令,Linux文件同步命令rsync详解
- 『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术
- (转)PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示...
- php主键自增sql语句,sql 自动增长的主键
- [IDDFS+背包] 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
- cesium版本之间如何兼容_【JS】cesium与three.js 结合的栗子,结合了一下网友们的栗子,解决了three.js 高版本模型出不来的问题...
- 个人学习进度(第十四周)
- poi之Excel下载之详细设置
- linux系统镜像下载
- Easypoi导出excel
- “华为杯”第十八届中国研究生数学建模竞赛一等奖经验分享
- 求1到n之间的质数(素数)
- Unity - 射线检测
- 小生意同样能赚大钱,卖豆芽都能一年存20多万?你怎么看?
- 安装intel wifi link 5100 AG无线网卡驱动程序,iwlwifi-5000-5.ucode中的readme文件
- [七七黎]乱七八糟-美女和野兽
- linux创建分区大小命令,Linux使用fdisk创建分区详解
热门文章
- 文字对称中的数学与魔术(二)——英文字母到单词的对称性
- C 阶梯式个人所得税计算
- 深度丨CES现场采访联想CTO芮勇:我在联想做的 AI 项目,以及对人工智能的看法...
- /dev/null表示的意思
- java.lang.IllegalArgumentException: Invoked method public abstract
- xposed开发8- hook微信聊天消息数据库插入操作
- sqlserver:文件和打印共享资源(*.*.*.210)处于联机状态,但未对连接尝试做出响应。
- 用java构造圆类_JAVA实验报告(圆类.doc
- React Hook 监听路由切换实时同步渲染页面功能
- TensorFlow识别图片数字