首页 > 其他分享 >获取和解析JWT令牌

获取和解析JWT令牌

时间:2024-09-30 18:49:49浏览次数:9  
标签:令牌 JWT 签名 Claims claims 解析

一、JWT令牌介绍

JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON对象的形式安全地传输信息。每个JWT令牌由三部分组成:Header(头部)、Payload(负载)和Signature(签名),它们之间用点(.)分隔。

1.Header(头部):通常包含两部分:令牌的类型(即JWT)和所使用的签名算法,如HMAC SHA256或RSA。

2.Payload(负载):包含所要传递的信息。负载可以包含多个声明(Claims),它们是关于实体(通常是用户)和其他数据的陈述。声明有三种类型:

  • Registered Claims:预定义的声明,有特定的语义,如exp(过期时间)、iss(发行人)、sub(主题)、aud(受众)等。
  • Public Claims:公共的声明,可以由使用JWT的各方自定义,如name或admin。
  • Private Claims:私有声明,是为在各方之间共享信息而创建的自定义声明。

3.Signature(签名):用于验证消息在传输过程中未被篡改,并且,对于使用私钥签名的令牌,还可以验证发送者的身份。签名的生成过程通常涉及使用头部指定的算法和密钥。

JWT的创建和验证过程通常如下:

  • 创建:首先,将头部和负载编码为Base64Url格式,然后将它们用点连接起来。接着,使用密钥和头部中指定的算法对这个连接后的字符串进行签名,最后将签名附加到字符串的末尾。
  • 验证:接收方接收到JWT后,首先对签名进行验证,确保令牌未被篡改,并且签名与使用的密钥匹配。如果验证通过,接收方可以读取负载中的声明。

JWT广泛应用于身份验证和信息交换,特别是在分布式系统和服务之间。它们可以用于单点登录(SSO)、用户会话管理和跨域身份验证等场景。由于JWT是自包含的,因此不需要查询数据库来验证令牌的有效性,这使得它们在网络应用中非常高效。然而,由于JWT可以包含敏感信息,因此通常需要通过HTTPS传输以确保安全性。

二、操作环境

win10、IDEA、JDK 17、MAVEN 3.6.0、Spring Boot 3.x(全程联网)

三、获取令牌

1.引入依赖到pom.xml

        <!--JWT令牌依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.12.3</version>
        </dependency>

2.编写测试代码

    /**
     * 生成JWT令牌
     */
    @Test
    public void getJwt(){
        Map<String,Object> claims = new HashMap<>();
        claims.put("id",1);
        claims.put("username","KBL");
        String jwt = Jwts.builder()
                .setClaims(claims) //自定义内容(载荷)
                .signWith(SignatureAlgorithm.HS256, "chengxuyuanchengxuyuanchengxuyuanchengxuyuanchengxuyuan") //签名算法
                .setExpiration(new Date(System.currentTimeMillis() + 24*3600*1000)) //有效期
                .compact();

        System.out.println(jwt);
    }

注意事项:

3.运行获取JWT令牌,若是获取失败,请参考(解决无法生成JWT令牌

四、解析令牌

方式一:本地解析

1.编写解析代码

/**
     * 解析JWT令牌
     */
    @Test
    public void parseJwt(){
        Claims claims = Jwts.parser()
                .setSigningKey("chengxuyuanchengxuyuanchengxuyuanchengxuyuanchengxuyuan")//指定签名密钥(必须保证和生成令牌时使用相同的签名密钥)
                .build()
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJLQkwiLCJleHAiOjE3Mjc3NzkxNTR9.7Nt1IbfAZ52PKW5cjjbjr3oND9iaJxvGFO5w5g3uNV8")
                .getBody();

        System.out.println(claims);
    }

注意事项:要和第三步获取令牌的信息对应起来,以免报错

2.运行测试代码解析JWT令牌

方式二:官网解析 

1.进入官网:JSON Web Tokens - jwt.io

2.选择加密算法:

3.左栏输入获取的JWT令牌,右栏可以看到解析的结果(可以看到结果和方式一一致)

以上就是关于如何获取和解析JWT令牌的方式,感谢各位看官的观看,下期见,谢谢~

标签:令牌,JWT,签名,Claims,claims,解析
From: https://blog.csdn.net/weixin_64178283/article/details/142661815

相关文章

  • JWT 令牌生成报错
    一、问题描述我在获取JWT令牌时,报了一个这样的错误error:io.jsonwebtoken.security.WeakKeyException:Thesigningkey'ssizeis64bitswhichisnotsecureenoughfortheHS256algorithm.二、问题原因原因是我这里指定的签名密钥也就是signingKey,也就是‘cehgnxuyu......
  • 全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址
    IP地址城市版查询接口API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍1.快证IP归属地查询API特点:支持IPv4提供高精版、区县级、城市......
  • 微服务JMeter解析部署使用全流程
    目录1、介绍2、下载3、运行4、设置简体中文版5、开始测试1、添加线程组2、添加监听器3、添加请求先.测试userController里的查询方法6、查看结果1、查看结果树2、汇总报告3、聚合报告7、JMeter报错1、介绍ApacheJMeter是Apache组织基于Java开发的压力......
  • [从零开始的 Vue3 系列]:Vue3 中常用组件通信全解析
    前言本系列将从零开始,系统性地介绍Vue3的常用API,逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示,帮助大家掌握Vue3的基础与进阶知识,最终具备独立搭建完整Vue3项目的能力。vue3中的组件通信Vue3提供了多种方式来进行组件之间的通信。根据场景的不......
  • 深入解析四舍五入:类型、原理与实战指南20240930
    深入解析四舍五入:类型、原理与实战指南引言在软件开发中,四舍五入是一个常见且重要的操作,广泛应用于数值计算、数据处理和金融分析等领域。然而,四舍五入并非只有一种方式,不同的舍入方法可能会对计算结果产生显著影响。本文将深入探讨四舍五入的常见类型、其背后的原理以及......
  • ECMAScript标准的详细解析
    ECMAScript(简称ES)是一种由Ecma国际(前身为欧洲计算机制造商协会)制定的标准化脚本语言规范,它在ECMA-262标准中被定义。ECMAScript是JavaScript的基础,定义了JavaScript的核心语法和功能。以下是对ECMAScript标准的详细解析。一、ECMAScript的起源与发展ECMAScript最初源自Net......
  • 基于ads1299的EEG导联脱落状态监测解析
    一概念调试导联脱落检测问题通常非常具体地取决于系统的配置方式。建议首先查看芯片手册的一些有用的配套资料。其次应该能够跟踪导联脱落电流的流动位置、并确认每个节点的直流偏置位置。在大多数情况下、当连接的输入未偏置为已知共模或导联脱落电流没有返回路径时、会......
  • 从 ES5 到 ES14:深入解析 JavaScript 的演进与特性
    文章目录前言一、ES5(ECMAScript2009)1.严格模式('usestrict')2.Object.defineProperty3.Array.isArray4.forEach,map,filter,reduce二、ES6(ECMAScript2015)1.let和const2.箭头函数3.模板字符串4.解构赋值5.class和extends6.模块(import和export)......
  • xpath解析数据
    节点的关系:父子同胞先辈后代常用路径表达式表达式描述nodename选取此节点的所有子节点/从根节点选取//从匹配选择的当前节点中选择文档的节点.获取当前节点..选取当前节点的父节点@选择属性通配符通配符描述*匹配任何元素节点......
  • i++和++i的区别,面试题解析
    i++和++i都是自增操作符,用于将变量的值增加1。i++是后增操作符,它首先返回变量的值,然后再将变量的值增加1。例如,如果i的初始值为1,执行i++后,i的值变为2。++i是前增操作符,它首先将变量的值增加1,然后再返回变量的值。例如,如果i的初始值为1,执行++i后,i的值变为2。区别在于返回值的......