前后端分离使用JWT进行Token验证

内容分享2小时前发布
0 2 0

什么是JWT

JSON Web Tokens(JWT)是一种Web令牌技术标准,由于前后端分离项目不能使用Session,目前普遍使用JWT来进行身份验证。JWT使用HeaderPayloadSignature三部分内容生成Token。

Header:一般由alg和typ两部分组成,alg代表使用的算法,有多种算法可以选择,具体可查看官网相关说明,官网地址:https://jwt.io;typ代表token的种类,固定就是JWT,使用Base64Url算法将Header转换成的字符串就是JWT的第一部分。

前后端分离使用JWT进行Token验证

Header的构成

Payload:载荷,一组用于确认前端用户身份和一些附加信息的键值对,列如用户名和token的签发日期、过期日期等信息。这些键值对的键叫Claims(声明),官网将Claims分为三种:registered, public, and private claims。

  • Registered claimsJWT预定义的声明,共有7种,不强制使用。

前后端分离使用JWT进行Token验证

7种预定义的声明

  • Public claims公共的声明,用户可以自行定义名称,但是需要在IANA JSON Web Token Registry(IANA是互联网数字分配机构)中注册以防止重名,这玩意儿用不到

前后端分离使用JWT进行Token验证

IANA JSON Web Token Registry

  • Private claims私有的声明。自定义的键,只要前后端沟通好每个键代表什么,就可以使用token在前后端共享一些数据。

Payload可以任意组合以上三种声明承载数据,大部分情况下我们都会用到预定义声明的exp,来定义token的失效时间,使用Base64Url算法将Payload转换成的字符串就是JWT的第二部分,由于Base64Url算法转换成的字符串可以使用工具还原数据,不应该在Payload中存放敏感信息,列如密码。

前后端分离使用JWT进行Token验证

官网payload示例

Signature:签名,一般需要一个密钥secret。将Header和Payload转换成的字符串加上secret,使用Header定义的算法进行加密,就生成了token。

前后端分离使用JWT进行Token验证

三部分组合起来使用算法生成token

前后端分离使用JWT进行Token验证

生成的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。

前后端分离使用JWT进行Token验证

官网针对各类编程语言推荐的库

  • 引入依赖包

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt</artifactId>

<version>0.9.1</version>

</dependency>

  • 创建token工具类,用于生成和验证token,生成的token应保存在redis中,解析时从redis读取token进行验证

前后端分离使用JWT进行Token验证

生成token,返回token字符串

前后端分离使用JWT进行Token验证

解析token,解析错误返回false

  • 创建登录拦截器用于验证token

前后端分离使用JWT进行Token验证

登录拦截器验证token

  • 创建拦截器配置类,将LoginInterceptor注册进去

前后端分离使用JWT进行Token验证

拦截器配置类,放行login和验证码api

前后端分离使用JWT进行Token验证

校验token结果

前端axios在每次请求是都要携带token

前后端分离使用JWT进行Token验证

© 版权声明

相关文章

2 条评论

  • 头像
    江南袁敏 投稿者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    yu乐捕手XXX 投稿者

    谢谢

    无记录
    回复