Java Jwt库的简介及使用详解

 更新时间:2021年11月09日 16:36:58   作者:oscar999  
JWT 是开放的行业标准RFC7591,用来实现端到端安全验证,就是通过一些算法对加密字符串和JSON对象之间进行加解密,下面通过本文给大家介绍Java Jwt库的简介及使用,感兴趣的朋友一起看看吧

JWT介绍

JWT概念

JWT , 全写JSON Web Token, 是开放的行业标准RFC7591,用来实现端到端安全验证.
简单来说, 就是通过一些算法对加密字符串和JSON对象之间进行加解密。
JWT加密JSON,保存在客户端,不需要在服务端保存会话信息。,可以应用在前后端分离的用户验证上,后端对前端输入的用户信息进行加密产生一个令牌字符串, 前端再次请求时附加此字符串,后端再使用算法解密。

JWT流程:

https://upload-images.jianshu.io/upload_images/4630295-7df0d10fcffe831b.png

JWT的构成

JWT字符串: 一段加密的JSON字符串。
包含了三类信息

  • Header头部: Token类型和加密算法。加密算法常见的有MD5、SHA、HMAC( Hash Message Authentication Code)。
  • PayLoad负载: 存放有效信息,包括

1.标准的声明,类似开发语言总的关键字。包括
iss(Issuser) - 签发者
sub Subject 面向主体
aud Audience 接收方
exp Expiration time 过期时间戳
nbf Not Before, 开始生效时间戳
iat(Issued at) 签发时间
jti(JWT ID): 唯一标识

2.公共的声明: 一般添加业务相关的必要信息,因为可解密,不建议敏感信息。

3.私有的声明:提供者和消费者共同定义的声明,Base64对称解密,不建议敏感信息

  • Signature签证

签证信息包括三部分:

  • Base64加密的header
  • Base64加密的payload
  • secret-密钥

使用header中声明的加密算法对Header和payload的加密连接字符串进行加盐secret组合加密。
密钥保存在服务端,服务端根据密钥进行解密验证。

 JWT与开发语言

JWT只是一个标准
可以通过不过的开发语言实现,包括Java,.NET, Python,Node Js, JavaScript,Perl, Ruby,Go等。
同一种语言,不同的开发者提供了多种实现库,以Java语言为例有java-jwt、?jose4j、nimbus-jose-jwt、jjwt

JWT官网

https://jwt.io/

这个网站提供了在线的基于不同算法的字符串和JSON对象的转换工具,同时也收集了不同语言的多种实现库。

java-jwt

java-jwt是Java语言中推荐的JWT实现库,使用Maven导入如下:

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

产生加密Token

String token = JWT.create()
            .withExpiresAt(newDate(System.currentTimeMillis()))  //设置过期时间
           .withAudience("user1") //设置接受方信息,一般时登录用户
          .sign(Algorithm.HMAC256("111111"));  //使用HMAC算法,111111作为密钥加密

解密Token获取负载信息并验证Token是否有效

 String userId = JWT.decode(token).getAudience().get(0);
        Assertions.assertEquals("user1", userId);
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("111111")).build();
        jwtVerifier.verify(token);             

到此这篇关于JWT介绍以及java-jwt的使用的文章就介绍到这了,更多相关java jwt使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • eclipse下搭建hibernate5.0环境的步骤(图文)

    eclipse下搭建hibernate5.0环境的步骤(图文)

    这篇文章主要介绍了eclipse下搭建hibernate5.0环境的步骤(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 关于Netty--Http请求处理方式

    关于Netty--Http请求处理方式

    这篇文章主要介绍了关于Netty--Http请求处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 详解使用@RequestBody取POST方式的json字符串

    详解使用@RequestBody取POST方式的json字符串

    这篇文章主要介绍了详解使用@RequestBody取POST方式的json字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java语言中的自定义类加载器实例解析

    Java语言中的自定义类加载器实例解析

    这篇文章主要介绍了Java语言中的自定义类加载器实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Mybatis映射文件实例详解

    Mybatis映射文件实例详解

    这篇文章主要介绍了 Mybatis映射文件实例详解,需要的朋友可以参考下
    2017-02-02
  • Java中new关键字和newInstance方法的区别分享

    Java中new关键字和newInstance方法的区别分享

    在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法一个是关键字外,最主要的区别是创建对象的方式不同
    2013-07-07
  • 一篇超详细的SpringBoot整合MybatisPlus的文章

    一篇超详细的SpringBoot整合MybatisPlus的文章

    这篇文章主要介绍了springboot整合Mybatis-plus的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • 在Eclipse安装Spring boot插件的步骤(图文)

    在Eclipse安装Spring boot插件的步骤(图文)

    这篇文章主要介绍了在Eclipse安装Spring boot插件的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • java生成抽样随机数的多种算法

    java生成抽样随机数的多种算法

    本文主要介绍了java生成抽样随机数的多种算法,主要是基于random库函数的,有需要的可以了解一下。
    2016-10-10
  • IntelliJ IDEA 2022.1.1 沒有CVS的过程分析

    IntelliJ IDEA 2022.1.1 沒有CVS的过程分析

    这篇文章主要介绍了IntelliJ IDEA 2022.1.1 沒有CVS的过程解析,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论