1、Token

Token英文直译过来是“令牌”的意思,什么是令牌,在古代你要通过城门需要的也是令牌,而在计算机系统中要通过的是计算机的大门。

古代的大门由士兵守卫,而计算机系统的大门也有“士兵”,如果你没有一个有效的令牌就无法通过,只能从哪来回哪去。

2、POM依赖

<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version>
</dependency>

3、生成Token

public static String getAdminToken(Admin admin) {long time = System.currentTimeMillis() + (1000 * 60 * 60 * 24);Date date = new Date();date.setTime(time);return  JWT.create().withAudience(admin.getId()) // 将用户ID存入token中.withExpiresAt(date)    // 设置过期时间.sign(Algorithm.HMAC256(admin.getId()));// 设置私钥为用户ID
}

如上方法会返回一个一段字符串:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.eyJhdWQiOiIxIiwiZXhwIjoxNjUyMDAzMjM4fQ
.cEkaKlNiA7OMJAv5hZI9hmRksujg08l00BwzpwwfhpE

如上Token中含有两个英文点,这两个英文点可将字符串分为三段。

第一段-头部(Header)

我们通过使用Base64解码第一段后得到如下内容:

{"typ":"JWT","alg":"HS256"
}

上面描述了我们使用了HS256算法对Token进行了签名。

第二段-负载(Payload)

我们通过使用Base64解码第二段后得到如下内容:

{"aud":"1","exp":1652003238
}

这里的内容不是必须的,是之前我们在生成Token时设置的一些内容。

aud(audience)可以理解为读者,如果客户端有多个类型,那么我们在分发Token时就可以约定一个类型,以便在验证时进行区分。

exp(expiration time)是过期时间,也是我们在生成Token时做的约定。

第二段负载中的内容可以自定义,但是这段内容并没有被加密,所以不要将密码等敏感信息放在这里。

第三段-签名(Signature)

我们通过使用Base64解码第三段后得到如下内容:

pI*Sb$=ddt3

是一段乱码,需要使用第一段中加密方式并配合私钥才可以解码其中的内容。

4、验证Token

String token = request.getHeader("token");
String adminID = request.getHeader("adminID");
if (token == null ) {returnJson(response, "请求未授权");return false;
}
// 解码
DecodedJWT decode = JWT.decode(token);
// 验证密钥是否正确
Algorithm algorithm = Algorithm.HMAC256(adminID);
algorithm.verify(decode);
// 有效期是否超时
Date expiresAt = decode.getExpiresAt();
if(expiresAt.getTime()<System.currentTimeMillis()){returnJson(response, "Token未授权或已超时");return false;
}
return true;

验证Token是否正确建议在拦截器或过滤器中进行,这里返回true表示Token有效,false为无效,无效的Token会被拦截,不会继续向下执行,控制层不会处理该请求。

5、升级Token安全性

我们可以在上面看出,在验证Token时会判断Token是否失效,但是Token过期时间在Payload中是非加密状态,也就是可以被修改,所以我们可以在服务端设置一个验证机制。

我们可以使用Redis作为存储Token时效的容器,在验证Token是否有效时可以对Redis进行访问验证;如果不想添加Redis的依赖,可以本地封装一个有时效的Map集合对Token进行保存。

【开发日记】Token的使用及Token的构成相关推荐

  1. 以太坊转账参数java_【ETH钱包开发04】web3j转账ERC-20 Token

    在上一篇文章中讲解了ETH转账,这一篇讲一下ERC-20 Token转账. [ETH钱包开发03]web3j转账ETH ERC-20 Token转账的2种方式 1.直接用web3j的API 2.jav ...

  2. Nancy跨平台开发总结(六)三层架构之Token认证的Rest API

    在开始写本节内容前,我使用Nancy.Authentication.Token实现的Token认证,但是就在我开始写本节内容的时,我看到Nancyfx的文档中的内容更新 所以我改为使用Nancy.Au ...

  3. python token 访问控制_python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...

  4. go token验证_golang jwt+token验证的实现

    Token验证是验证用户身份的重要方式,在golang开发中具有广泛应用,文中主要阐述了利用jwt包加密后的token验证. 导入包: import ( "github.com/dgrija ...

  5. 什么是token,如何使用token

    什么是token? 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西. 一.我们先解 ...

  6. JWT,springboot整合JWT完成token的验证,token的使用,java架构师技术栈

    /** @author dugt1998@163.com @date 2020/11/8 12:40 */ public class JWTUtils { //签名 自己项目中的签名 private ...

  7. python怎么获取token值_python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...

  8. 广东海洋大学体育馆管理系统 开发日记2

    GYM用来对体育馆进行管理,主要功能包括人员管理.场地使用管理.体育赛事管理.器材管理.运营金额数据报表. GYM包括三种角色(Actor): 1.   普通用户(User) 普通用户指的是GYM系统 ...

  9. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  10. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

最新文章

  1. golang 如何判断变量的类型
  2. php escape undfine,PHP中处理 undefined variable的方法 | Soo Smart!
  3. 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)
  4. C++/mfc错误总结
  5. Android studio 常用的插件
  6. steam令牌 未能连接到服务器,连接错误无法连接到steam网络怎么办 steam网络连接错误解决方法【图文】...
  7. 基于Python的IMDB电影评论文本分类
  8. svn创建版本库以及创建其下目录
  9. VLAN间的三层通信
  10. PYTHON开发毕业设计做什么好鸭?
  11. Linux驱动学习笔记之触摸屏驱动
  12. 学习英文-学以致用【场景:常说错的中式英文】
  13. CSDN上代码块背景颜色的设置
  14. 重启服务器后hyperv虚拟机没了,微软Hyper-V 虚拟化和灾难恢复
  15. Google新动作频出 Google Trends发布
  16. Qt编写安防楼宇对讲管理平台源码
  17. 子域名收集工具——Sublist3r
  18. 论文查重渠道和有效的降重方法
  19. Nginx+Lua+FastDFS+Docker实现图片缩略图
  20. 社会群体及分层问题研究类毕业论文文献都有哪些?

热门文章

  1. Mixly06:国际摩尔斯电码救难信号SOS
  2. 【完结】中国12大AI研究院,高调的低调的你pick谁
  3. MEF入门之不求甚解,但力求简单能讲明白(五)
  4. IT部门运行的项目实在太多,怎么办?
  5. 霸道的TOM SKYPE
  6. [leetcode] 273.Integer to English Words
  7. du---查看文件夹大小-并按大小进行排序
  8. vi 全局替换命令等
  9. Android 11 WebView 打开html文件,加载时报错:ERR_ACCESS_DENIED
  10. 局域网聊天软件 简单实现原理(附:代码)