网站首页 > 技术文章 正文
什么是JWT
JSON Web Tokens(JWT)是一种Web令牌技术标准,由于前后端分离项目不能使用Session,目前普遍使用JWT来进行身份验证。JWT使用Header、Payload和Signature三部分内容生成Token。
Header:通常由alg和typ两部分组成,alg代表使用的算法,有多种算法可以选择,具体可查看官网相关说明,官网地址:https://jwt.io;typ代表token的种类,固定就是JWT,使用Base64Url算法将Header转换成的字符串就是JWT的第一部分。
Payload:载荷,一组用于确认前端用户身份和一些附加信息的键值对,比如用户名和token的签发日期、过期日期等信息。这些键值对的键叫Claims(声明),官网将Claims分为三种:registered, public, and private claims。
- Registered claims:JWT预定义的声明,共有7种,不强制使用。
- Public claims:公共的声明,用户可以自行定义名称,但是需要在IANA JSON Web Token Registry(IANA是互联网数字分配机构)中注册以防止重名,这玩意儿用不到。
- Private claims:私有的声明。自定义的键,只要前后端沟通好每个键代表什么,就可以使用token在前后端共享一些数据。
Payload可以任意组合以上三种声明承载数据,大部分情况下我们都会用到预定义声明的exp,来定义token的失效时间,使用Base64Url算法将Payload转换成的字符串就是JWT的第二部分,由于Base64Url算法转换成的字符串可以使用工具还原数据,不应该在Payload中存放敏感信息,比如密码。
Signature:签名,一般需要一个密钥secret。将Header和Payload转换成的字符串加上secret,使用Header定义的算法进行加密,就生成了token。
Token的验证流程:
token签发:前端登录,后端根据账号密码确认身份,身份验证通过后,由后端生成token返回给前端,前端将token保存在localstorage或sessionStorage中,后端对login请求不做token验证,只做token签发。
token验证:后端除了login请求外,所有的api请求都要经过token验证。前端每次请求都需要携带token,通常放在请求头Header的Authorization字段中,后端对前端的请求携带的token进行解析并获取前端用户信息,验证通过则放行,验证不通过返回错误信息,前端跳转至登录页面。
Springboot+Redis+JJWT完成token验证
JWT只是一种技术标准,在JWT官网推荐了各类编程语言用于使用JWT的库,Java目前星数最多的是JJWT。
- 引入依赖包
- 创建token工具类,用于生成和验证token,生成的token应保存在redis中,解析时从redis读取token进行验证
- 创建登录拦截器用于验证token
- 创建拦截器配置类,将LoginInterceptor注册进去
前端axios在每次请求是都要携带token
- 上一篇: php开发 确保数据的唯一性
- 下一篇: 成为一个前端工程师应该从哪里起步?
猜你喜欢
- 2025-03-11 php开发 确保数据的唯一性
- 2025-03-11 前端使用FileReader 读取本地文件和校验文件唯一
- 2025-03-11 Node 如何在 Controller 层进行数据校验
- 2025-03-11 利用forms表单组件进行表单校验
- 2025-03-11 一坨一坨 if/else 参数校验,被 SpringBoot 参数校验组件整干净了
- 2025-03-11 Spring Boot 进阶-浅析SpringBoot中如何完成数据校验
- 2025-03-11 SpringBoot2 多步骤表单验证架构实战(源码可下载)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)