当前位置: 首页 > Web前端 > JavaScript

【开发日记】Token的使用以及Token

时间:2023-03-26 22:44:43 JavaScript

的构成1.TokenToken英文直译为“代币”。什么是令牌?在古代,过城门所需要的也是信物。你必须通过的是计算机的门。古代城门由士兵把守,计算机系统的城门也有“兵”。如果没有有效令牌,就无法通过,只能从某处来回。2.POM依赖com.auth0java-jwt3.10.33.生成TokenpublicstaticStringgetAdminToken(adminadmin){longtime=System.currentTimeMillis()+(1000*60*60*24);日期date=newDate();date.setTime(时间);returnJWT.create().withAudience(admin.getId())//将用户ID存储在令牌中。withExpiresAt(date)//设置过期时间。sign(Algorithm.HMAC256(admin.getId()));//SettheprivatekeyastheuserID}TheabovemethodwillreturnaAstring:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxIiwiZXhwIjoxNjUyMDAzMjM4fQ.cEkaKlNiA7OMJAv5hZI9hmRksujg08l00BwzpwwfhpETheaboveTokencontainstwoEnglishdots,whichcanbe分为三个英文点。第一段——表头(Header)我们对第一段使用Base64进行解码得到如下内容:{"typ":"JWT","alg":"HS256"}上面介绍了我们使用HS256算法处理令牌签名。第二段-有效载荷(Payload)我们使用Base64对第二段进行解码得到如下内容:{"aud":"1","exp":1652003238}这里的内容不是必须的,是我们生成Token的时候之前的一些设置。aud(听众)可以理解为读者。如果客户端有多种类型,那么我们在分发Token时可以约定一种类型,以便在验证时区分。exp(expirationtime)是过期时间,也是我们在生成Token的时候约定好的。第二个payload中的内容可以自定义,但是这个内容没有加密,所以不要在这里放密码等敏感信息。第三段——签名(Signature)我们对第三段进行Base64解码,得到如下内容:pI*Sb$=ddt3是一段乱码,需要使用第一段的加密方式,并配合私钥。解码其内容。4.验证TokenStringtoken=request.getHeader("token");StringadminID=request.getHeader("adminID");if(token==null){returnJson(response,"请求未授权");returnfalse;}//解码DecodedJWTdecode=JWT.decode(token);//验证密钥是否正确Algorithmalgorithm=Algorithm.HMAC256(adminID);算法。验证(解码);//有效期是否到期返回假;}返回真;验证令牌是否正确。建议在拦截器或者过滤器中进行,这里返回true表示token有效,false表示无效,无效的token会被拦截,不会继续往下执行,控制层将不处理请求。5、升级Token安全性从上面我们可以看出,在验证Token时,会判断Token是否失效,但是Token过期时间在Payload中是未加密状态,即可以修改,所以我们可以在服务器端设置一个验证机制。我们可以将Redis作为一个时间敏感的容器来存放Token,在验证Token是否有效的时候访问Redis进行验证;如果不想添加Redis依赖,可以在本地封装一个时间敏感的Map集合来保存Token。本文由博客多发平台OpenWrite发布!