本文你能学到什么?

token的组成

token串的生成流程。

token在客户端与服务器端的交互流程

Token的优点和思考

参考代码:核心代码使用参考,不是全部代码

JWT token的组成

头部(Header),格式如下:

{

“typ”: “JWT”,

“alg”: “HS256”

}

由上可知,该token使用HS256加密算法,将头部使用Base64编码可得到如下个格式的字符串:

eyJhbGciOiJIUzI1NiJ9

有效载荷(Playload):

{

“iss”: “Online JWT Builder”,

“iat”: 1416797419,

“exp”: 1448333419,

…….

“userid”:10001

}

有效载荷中存放了token的签发者(iss)、签发时间(iat)、过期时间(exp)等以及一些我们需要写进token中的信息。有效载荷也使用Base64编码得到如下格式的字符串:

eyJ1c2VyaWQiOjB9

签名(Signature):

将Header和Playload拼接生成一个字符串str=“eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOjB9”,使用HS256算法和我们提供的密钥(secret,服务器自己提供的一个字符串)对str进行加密生成最终的JWT,即我们需要的令牌(token),形如:str.”签名字符串”。

token在服务与客户端的交互流程

1:客户端通过用户名和密码登录

2:服务器验证用户名和密码,若通过,生成token返回给客户端。

3:客户端收到token后以后每次请求的时候都带上这个token,相当于一个令牌,表示我有权限访问了

4:服务器接收(通常在拦截器中实现)到该token,然后验证该token的合法性(为什么能验证下面说)。若该token合法,则通过请求,若token不合法或者过期,返回请求失败。

关于Token的思考

服务如何判断这个token是否合法?

由上面token的生成可知,token中的签名是由Header和有效载荷通过Base64编码生成再通过加密算法HS256和密钥最终生成签名,这个签名位于JWT的尾部,在服务器端同样对返回过来的JWT的前部分再进行一次签名生成,然后比较这次生成的签名与请求的JWT中的签名是否一致,若一致说明token合法。由于生成签名的密钥是服务器才知道的,所以别人难以伪造。

token中能放敏感信息吗?

不能,因为有效载荷是经过Base64编码生成的,并不是加密。所以不能存放敏感信息。

Token的优点

(1)相比于session,它无需保存在服务器,不占用服务器内存开销。

(2)无状态、可拓展性强:比如有3台机器(A、B、C)组成服务器集群,若session存在机器A上,session只能保存在其中一台服务器,此时你便不能访问机器B、C,因为B、C上没有存放该Session,而使用token就能够验证用户请求合法性,并且我再加几台机器也没事,所以可拓展性好就是这个意思。

(3)由(2)知,这样做可就支持了跨域访问。

Java实例:JWT token使用

部分代码来自互联网,找不到原作者了。。

编写JWT(Java Web Token)操作类:JavaWebToken

public class JavaWebToken {

private static Logger log = LoggerFactory.getLogger(JavaWebToken.class);

//该方法使用HS256算法和Secret:bankgl生成signKey

private static Key getKeyInstance() {

//We will sign our JavaWebToken with our ApiKey secret

SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("bankgl");

Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());

return signingKey;

}

//使用HS256签名算法和生成的signingKey最终的Token,claims中是有效载荷

public static String createJavaWebToken(Map claims) {

return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, getKeyInstance()).compact();

}

//解析Token,同时也能验证Token,当验证失败返回null

public static Map parserJavaWebToken(String jwt) {

try {

Map jwtClaims =

Jwts.parser().setSigningKey(getKeyInstance()).parseClaimsJws(jwt).getBody();

return jwtClaims;

} catch (Exception e) {

log.error("json web token verify failed");

return null;

}

}

}

编写登录Conreoller,在服务器端给客户返回token.

public LoginStatusMessage checkUserAndPassword(

@RequestParam(value="username",required=true) String username,

@RequestParam(value="password",required=true) String password,User user,HttpServletRequest request) throws Exception{

User u = new User();

//登录成功

if((u = userService.checkUsernameAndPassword(user)) != null){

Map m = new HashMap();

m.put("userid", user.getUserid());

String token = JavaWebToken.createJavaWebToken(m);

System.out.println(token);

LoginStatusMessage lsm = new LoginStatusMessage();

lsm.setUser(u);

lsm.setToken(token);

return lsm;

};

//登录失败,返回Null

return null;

}

在拦截器中对请求中的Token验证(部分代码,表示下意思):

String token = request.getParameter("token");

if(JavaWebToken.parserJavaWebToken(token) != null){

//表示token合法

return true;

}else{

//token不合法或者过期

return false;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

jwt token注销_详解JWT token心得与使用实例相关推荐

  1. python爬关键词百度指数_详解python3百度指数抓取实例

    百度指数抓取,再用图像识别得到指数 前言: 土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字: 哥那么叼的人怎么会被他吓到,于是乎花了零零碎碎加起来大约2天半搞定,在此鄙视一下土福 安装的库很多 ...

  2. python的pillow给图片加文字_详解PILLOW图片中加入中文的实例

    索引简述 准备 示例 效果图 结语 简述 我在使用opencv2或3的时候想要在图片上添加中文文字,需要去下载Freetype库,编译好链接到opencv库中才能中文的输出.网上大部分在图片中插入中文 ...

  3. JWT(Json web token)认证详解

    JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...

  4. Token 防盗链详解

    前言 随着互联网的高速发展,无论是移动 APP 还是 WEB 站点,访问的安全问题始终困扰着内容提供商.CDN ( Content Delivery Network,内容分发网络 ) 服务作为当今互联 ...

  5. 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能

    大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...

  6. jwt token注销_辩证的眼光搞懂 JWT 这个知识点

    什么是 JWT 概念 JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案. JWT 原理 JWT 组成 JWT 由三部分组成:Header,Payload,Signature ...

  7. jwt token注销_【原创精选】OAuth 2.0+JWT+spring security完成认证授权-生产级-附带源码...

    前言导读 分析一下为什么要用OAuth2和JWT来做 1. **单点登录(SSO)**方案单击登录方案是最常见的解决方案,但单点登录需要每个与用户交互的服务都必须与认证服务进行通信,这不但会造成重复, ...

  8. 一文详解jwt token以及sprig boot如何整合实现 jwt token操作

    文章目录 1. jwt是什么 2. jwt的来源 2.1 传统的session认证 2.2 基于token的鉴权机制 3. JWT的构成 3.1 header 3.2 playload 3.3 sig ...

  9. jwt token注销_退出登录时怎样实现JWT Token失效?

    退出登录时,如果不使JWT Token失效会产生如下2个问题 问题1-未过期的token还是可以用 要是用户在多个设备登录了,而且本地保存了token.当一个地方丢弃token,但是这个token要是 ...

最新文章

  1. mongodb jar包_MongoDB是什么?看完你就知道了!
  2. 恩智浦AI视觉组之逐飞岁末彩蛋
  3. DTS增量/同步支持DDL迁移的说明
  4. java如何配置环境_java如何配置环境变量
  5. 阿里大规模数据中心性能分析
  6. 怎么在mysql查询自己建的表格_oracle数据库中怎么查询自己建的表
  7. C/C++获取CPU相关信息(非WMI)
  8. (三)Qt语言国际化
  9. sequelize 外键关联_用Sequelize计算关联条目
  10. Palo Alto Networks下一代安全平台五大创新功能:云安全为重中之重
  11. C++语言定义的标准转换
  12. 【298天】每日项目总结系列036(2017.11.30)
  13. php 生成vbs文件路径,vbs下一些取特殊路径的方法总结
  14. MATLAB绘制微分方程的相图/方向场/向量场
  15. 人类2100年长啥样?3D建模模拟出来让人惊掉下巴!
  16. 安旭生物科创板上市:曾遭弃购1400万元,凌世生夫妇控制60%股份
  17. Java线程Dump分析-工具TDA
  18. 小公司真的能培养出来自己的人吗?员工真的成长过快是好事吗?
  19. 6-1 判断顺序表是否有序(Java语言描述 )
  20. 程序设计阶段性总结报告二

热门文章

  1. scala的字符串的方法(五)
  2. 计算机编程英语怎么写,计算机编程英语词汇大全.pdf
  3. python怎么算积分_python计算积分
  4. php curl 发送checkbox,使用curl 提交表单(多维数组+文件)数据到服务器的有关问题...
  5. Spring(二)Spring IOC
  6. OpenShift 4 - 设置集群节点和Pod容器的时间和时区
  7. OpenShift 4 之Istio-Tutorial (9) 访问限流
  8. SQL Server中的假期表和GetWorkDays函数
  9. Linux 引入自动化测试平台 KernelC
  10. 在MVC 6 .NET核心应用程序中添加种子数据