莫方教程网

专业程序员编程教程与实战案例分享

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

什么是JWT

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

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

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

  • Registered claimsJWT预定义的声明,共有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。

  • 引入依赖包

io.jsonwebtoken

jjwt

0.9.1

  • 创建token工具类,用于生成和验证token,生成的token应保存在redis中,解析时从redis读取token进行验证
  • 创建登录拦截器用于验证token
  • 创建拦截器配置类,将LoginInterceptor注册进去

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

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言