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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java五子棋单机版源码分享

    Java五子棋单机版源码分享

    这篇文章主要为大家分享了Java五子棋单机版源码,JavaGUI编写单机版五子棋,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 解决java.util.NoSuchElementException异常的问题

    解决java.util.NoSuchElementException异常的问题

    这篇文章主要介绍了解决java.util.NoSuchElementException异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring Data JPA实现数据持久化过程详解

    Spring Data JPA实现数据持久化过程详解

    Spring Data JPA是一个流行的Java持久化框架,它在Java应用程序中提供了一种简单、一致和易于使用的方式来访问各种数据库。本文将介绍Spring Data JPA的基本概念和用法并提供一个完整的实例,帮助您更好地理解它的使用方法和优势
    2023-05-05
  • ZooKeeper入门教程三分布式锁实现及完整运行源码

    ZooKeeper入门教程三分布式锁实现及完整运行源码

    本文是ZooKeeper入门系列教程,分布式锁有多种实现方式,比如通过数据库、redis都可实现。作为分布式协同工具ZooKeeper,当然也有着标准的实现方式。本文介绍在zookeeper中如何实现排他锁
    2022-01-01
  • Java定义栈结构,并实现入栈、出栈操作完整示例

    Java定义栈结构,并实现入栈、出栈操作完整示例

    这篇文章主要介绍了Java定义栈结构,并实现入栈、出栈操作,结合完整实例形式分析了java数据结构中栈的定义、以及入栈、出栈、栈是否为空判断、栈大小计算、打印栈元素等相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • Java中检查值是否存在于数组中的4种详细方法

    Java中检查值是否存在于数组中的4种详细方法

    这篇文章主要给大家介绍了关于Java中检查值是否存在于数组中的4种详细方法,相信大家在操作Java的时候经常会要检查一个数组(无序)是否包含一个特定的值,需要的朋友可以参考下
    2023-08-08
  • Java实现哈希表的基本功能

    Java实现哈希表的基本功能

    今天教大家怎么用Java实现哈希表的基本功能,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot实现Read Through模式的操作过程

    SpringBoot实现Read Through模式的操作过程

    Read Through模式通常是指一种缓存策略,其中当应用程序尝试读取数据时,缓存系统首先被检查以查看数据是否已经存在于缓存中,这篇文章主要介绍了SpringBoot实现Read Through模式,需要的朋友可以参考下
    2024-07-07
  • Spring Boot 2.X快速整合jpa过程解析

    Spring Boot 2.X快速整合jpa过程解析

    这篇文章主要介绍了Spring Boot 2.X 如何快速整合jpa?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • java分布式流处理组件Producer入门详解

    java分布式流处理组件Producer入门详解

    这篇文章主要为大家介绍了java分布式流处理组件Producer入门详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论