JWT简介

JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。

基于session的登录认证

在传统的用户登录认证中,因为http是无状态的,所以都是采用session方式。用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId。

图片来源于网络博客

cookie+session这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大。而JWT不是这样的,只需要服务端生成token,客户端保存这个token,每次请求携带这个token,服务端认证解析就可。

图片来源于网络博客

JWT生成Token后的样子

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvcmciOiLku4rml6XlpLTmnaEiLCJuYW1lIjoiRnJlZeeggeWGnCIsImV4cCI6MTUxNDM1NjEwMywiaWF0IjoxNTE0MzU2MDQzLCJhZ2UiOiIyOCJ9.49UF72vSkj-sA4aHHiYN5eoZ9Nb4w5Vb45PsLF7x_NY

校验地址:https://jwt.io/#decoded-jwt

JWT的构成

第一部分我们称它为头部(header),第二部分我们称其为载荷(payload),第三部分是签证(signature)。

header

jwt的头部承载两部分信息:

  • 声明类型,这里是jwt

  • 声明加密的算法 通常直接使用 HMAC SHA256

完整的头部就像下面这样的JSON:

{

"typ": "JWT",

"alg": "HS256"

}

然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

playload

载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分

  • 标准中注册的声明

  • 公共的声明

  • 私有的声明

标准中注册的声明 (建议但不强制使用) :

  • iss: jwt签发者

  • sub: jwt所面向的用户

  • aud: 接收jwt的一方

  • exp: jwt的过期时间,这个过期时间必须要大于签发时间

  • nbf: 定义在什么时间之前,该jwt都是不可用的.

  • iat: jwt的签发时间

  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共的声明 :

公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.

私有的声明 :

私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

定义一个payload:

{

"name":"Free码农",

"age":"28",

"org":"今日头条"

}

然后将其进行base64加密,得到Jwt的第二部分:

eyJvcmciOiLku4rml6XlpLTmnaEiLCJuYW1lIjoiRnJlZeeggeWGnCIsImV4cCI6MTUxNDM1NjEwMywiaWF0IjoxNTE0MzU2MDQzLCJhZ2UiOiIyOCJ9

signature

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

  • header (base64后的)

  • payload (base64后的)

  • secret

这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分:

49UF72vSkj-sA4aHHiYN5eoZ9Nb4w5Vb45PsLF7x_NY

密钥secret是保存在服务端的,服务端会根据这个密钥进行生成token和验证,所以需要保护好。

java方式实现

Maven

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

加密与校验代码:

加密方法与校验方法

测试代码:

测试方法

代码输出结果:

代码输出结果

可以很清楚的看到,第一次用生成的Token去校验,校验通过,并且输出了Token中包涵的信息。第二次用过期的Token调用校验方法,直接抛出异常,提示Token信息过期。

JWT总结

1、因为json的通用性,所以JWT是可以进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。

2、payload部分,JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。

3、便于传输,jwt的构成非常简单,字节占用很小,所以它是非常便于传输的。它不需要在服务端保存会话信息, 所以它易于应用的扩展

--------------------- 本文来自 师太,老衲把持不住了 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u011277123/article/details/78918390?utm_source=copy

国服最强JWT生成Token做登录校验讲解,看完保证你学会!相关推荐

  1. JWT生成Token做登录校验讲解

    Free码农 2017-12-28 00:08:02 JWT简介 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准. JWT的声明一般被用来在身份 ...

  2. 手机扫描怎么做成文档?看完你就学会操作了

    相信很多职场人在办公的时候,经常会遇到大量的文件需要处理,其中一部分可能是纸质版的文件.但为了方便进行编辑,大家需要可以借助一些扫描软件对纸质版文件进行扫描,但是还有一部分小伙伴可能还不知道应该怎么进 ...

  3. JWT生成Token及解析Token

    JWT生成Token详解 [第一部分]历史文章: SpringBoot总结(一)--第一个SpringBoot项目 SpringBoot总结(二)--Spring Boot的自动配置 SpringBo ...

  4. JWT生成token

    1.简介: (1.1)JWT(Json Web Token): 为网络应用环境间传递声明而执行一种基于JSON开放标准 (1.2)JWT认证用户身份信息: 认证成功,才可获取其它资源,如:用户登录 ( ...

  5. JSON Web Token (JWT)生成Token及解密实战

    转载自 JSON Web Token (JWT)生成Token及解密实战 昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是J ...

  6. JWT生成token和验证的简单实现

    给客户提供数据接口时,要求使用jwt生成token实现token认证 首先引入依赖: <!-- JWT --> <dependency><groupId>com.a ...

  7. springboot+shiro+jwt实现token认证登录

    准备: springboot 2.5.5 jdk 1.8 没有操作刷新token功能,也没有放redis做缓存 1.先贴代码 2.后讲一下验证逻辑 1.导入依赖 <!--shiro-->& ...

  8. tp5 JWT生成token验证接口安全、防止高频请求

    1.composer安装 jwt composer require lcobucci/jwt 3.3 2.在extend/tools/jwt目录下创建Token.php文件 注意 extend目录下t ...

  9. jwt生成token和验证token以及获取playload的数据,实现token拦截

    jwt实现流程: 1.添加依赖: <dependency><groupId>com.auth0</groupId><artifactId>java-jw ...

最新文章

  1. 40个Java多线程问题总结
  2. Java基础-Date类常用方法介绍
  3. 基于帝国cms 7.5带支付个人也可以使用的h5微信商城
  4. P3870-[TJOI2009]开关【分块】
  5. ubuntu下安装JDK和netbeans
  6. 时间格式化需要注意点不可使用本地时间
  7. java中存在对多个对象加锁的情况_Java对象锁和类锁全面解析(多线程synchronized关键字)...
  8. Centos7配置IP地址和DNS
  9. python配置文件模块_Python解析配置文件模块:ConfigPhaser
  10. font-awesome在Vue项目中的使用(npm使用)
  11. CWM(Common warehouse metamodel)
  12. 为什么说python是世界上最好的语言-《权力的游戏》告诉你,为啥 Python 是世上最好的语言...
  13. 【高数-2】多元函数最值
  14. iSlide(PPT插件)
  15. 河北计算机软件职业技术学院,河北软件职业技术学院2021年排名
  16. 机器学习常见英语单词解释
  17. MobPush创建推送
  18. IDEA+MySQL+JavaFX之通讯录系统
  19. matlab 野值剔除,一种基于多项式拟和的野值剔除方法与流程
  20. 【Mac】让Safari 书签显示网站 Logo

热门文章

  1. [渝粤教育] 西南政法大学 经济法学 参考 资料
  2. 软件学院宣传视频制作日志——脚本的创作
  3. 六石管理学:话不投机半句多,注意谈话中的抬杠及对策
  4. onekey ghost怎么用
  5. 财政部千亿规模减税方案已获国务院批准
  6. WB蛋白质印迹法(Western blot)
  7. 再不给自己充充电,只怕到了40岁,还得每天为赶公交挤地铁犯愁
  8. Django——记一次migrate错误
  9. 公安部正制定网络安全条例 大数据保护机制将完善
  10. 记一次从无法进入系统的mac中拷贝数据至U盘过程