JWT入门

news2025/1/12 7:01:49

JWT与TOKEN

JWT(JSON Web Token)是一种基于 JSON 格式的轻量级安全令牌,通常用于在网络应用间安全地传递信息。而“token”一词则是一个更广泛的术语,用来指代任何形式的令牌,用于在计算机系统中进行身份验证或授权。JWT 是 token 的一种具体实现方式,提供了一种基于 JSON 结构的令牌标准,用于在客户端和服务器之间传递信息,并在许多网络应用中广泛使用。

1.简介

Json Web Token,通过数字签名的方式,以JSON对象为载体,不需中间服务器验证的情况下,允许在源和接收方之间可靠传输,确保信息的完整性和真实性

2.用处

授权认证,一旦用户登录,后续每个请求都包含有JWT,系统在每次处理请求之前,都先进行JWT安全校验。

3.组成

由3部分组成,用"."拼接

三部分分别是:

  • Header

    • token类型

    • 加密算法名称

  • Payload 载荷,存放有效信息

    • 标准中注册的声明 ---信息安全的分类

    • 公共的声明

    • 私有的声明

  • Signature 签名

    • 将加密后的Header和加密后的Payload用点拼接,再将结果通过header中声明的加密算法进行加密

例子

        <!--jwt依赖-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>       

package com.jwt;

import com.sun.javafx.binding.StringFormatter;
import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

public class Test {

    // 24h
    private long time = 1000 * 60 * 60 * 24;
    private String signature = "admin";
    /**
     * 测试JWT令牌的生成和配置。
     * 使用JJWT库创建一个包含特定头部、载荷和签名的JWT令牌。
     * 头部配置了令牌的类型和算法。
     * 载荷包含了用户名、密码和主题等信息。
     * 设置了令牌的过期时间和唯一标识。
     * 使用HS256算法对令牌进行签名以确保完整性。
     */
    @org.junit.Test
    public void jwtTest() {
        // 创建JWT令牌构建器
        JwtBuilder jwtBuilder = Jwts.builder();
        // 构建并配置JWT令牌
        String jwtToken = jwtBuilder
                // 设置头部参数,定义令牌类型和算法
                // header
                .setHeaderParam("typ", "JWT")
                .setHeaderParam("alg", "HS256")
                // 设置载荷信息,包含用户名和密码
                // payload
                .claim("username", "admin")
                .claim("password", "123456")
                // 设置主题
                .setSubject("admin-Test")
                // 设置令牌过期时间
                .setExpiration(new Date(System.currentTimeMillis() + time))
                // 设置令牌的唯一标识
                .setId(UUID.randomUUID().toString())
                // 设置令牌的发行时间
                .setIssuedAt(new Date())
                // 使用HS256算法和签名密钥对令牌进行签名
                // signature
                .signWith(SignatureAlgorithm.HS256, signature)
                // 将令牌紧凑化为最终的字符串表示形式
                .compact();
        System.out.println(jwtToken);
    }
    /**
     * 解析JWT令牌。
     * 该方法演示了如何使用JJWT库解析一个JWT令牌,并从中提取出声明信息。
     * JWT令牌被设计为一种安全的数据传输方式,其中包含了用户信息或其他需要传递给服务端的信息。
     * 在这个例子中,我们解析令牌以获取用户名、密码、令牌ID、主题和过期时间等信息。
     */
    @org.junit.Test
    public void parse(){
        // 定义一个JWT令牌字符串
        String jwtToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiIxMjM0NTYiLCJzdWIiOiJhZG1pbi1UZXN0IiwiZXhwIjoxNzE5ODM1Mzc4LCJqdGkiOiJiOGI2M2QxYy1iODhiLTQ4MDAtOWEyYi0yOTVkY2Q3NDNjMTQiLCJpYXQiOjE3MTk3NDg5Nzh9.Espy5I1IjwuPmnkHx-6TTie_VUP2zLDnasxfNDilclI";

        // 创建JWT解析器
        JwtParser jwtParser = Jwts.parser();

        // 设置解析器的签名密钥,并解析JWT令牌为Jws<Claims>对象
        Jws<Claims> claimsJws = jwtParser.setSigningKey(signature)
                .parseClaimsJws(jwtToken);

        // 提取声明信息
        Claims claims = claimsJws.getBody();

        // 打印提取的声明信息:用户名、密码、令牌ID、主题和过期时间
        System.out.println(claims.get("username"));
        System.out.println(claims.get("password"));
        System.out.println(claims.getId());
        System.out.println(claims.getSubject());
        System.out.println(claims.getExpiration());
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1888935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EIOT能源物联网平台在连锁门店的应用

在当今快节奏的商业环境中&#xff0c;连锁门店的管理和运营变得越来越具有挑战性。能源数据是连锁门店的管理中重要组成部分&#xff0c;为了提高门店的能源利用效率和管理水平&#xff0c;需要依赖先进的集团能源管理系统&#xff0c;进而实现节能减排&#xff0c;优化运营成…

探索指针(3)-C语言

目录 1.字符指针变量 一. 什么是字符指针&#xff1f; 二.字符指针的使用 三.常量字符串与字符指针的关系 四.字符数组和字符串常量 2.数组指针变量 一. 指向数组的指针 3. 二维数组传参的本质 指针形式的函数参数 4.函数指针变量 一. 函数指针的声明 二. 初始化和…

常见锁策略之可重入锁VS不可重入锁

可重入锁VS不可重入锁 有一个线程,针对同一把锁,连续加锁两次,如果产生了死锁,那就是不可重入锁,如果没有产生死锁,那就是可重入锁. 死锁 我们之前引入多线程的时候不是讲了一个加数字的案例么,我们今天以它来举例 当我们这样写的时候会出现什么问题? 分析:第一个synchron…

alibaba EasyExcel 简单导出数据到Excel

导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version> </dependency> 1、alibaba.excel.EasyExcel导出工具类 import com.alibaba.excel.EasyExcel; import …

揭秘,PyArmor库让你的Python代码更安全

PyArmor 概述: PyArmor 是一个用于加密和保护 Python 源代码的工具,旨在防止代码被逆向工程和未经授权的使用.通过将 Python 源代码编译为加密的字节码,PyArmor 提供了一种有效的方法来保护知识产权和敏感算法. 安装 pip install pyarmor安装完成后,可以通过以下命令验证安装…

SaaS联盟分销系统如何高效管理推广渠道的实用指南

随着众多SaaS企业不断向PLG模式转型&#xff0c;传统的推广方式&#xff0c;比如广告投放推流、第三方cookie数据追踪等方式的成本效益比低下&#xff0c;更多的SaaS企业选择可“低成本&#xff0c;高回报”的联盟营销策略。比如Figama、Unbounce、Looka这些中小型SaaS企业&…

SCI丨5分期刊,JCR一区

SCI&#xff0c;5分&#xff0c;JCR Q1&#xff0c;中科大类3小类2区 1 基于复杂网络与xxx能源汽车节能数值分析 2 基于热能损失优化的xxx与性能管理 3 基于xxxLCA技术的绿色制造工艺优化研究 4 基于xxx入侵检测技术的物联网智能制造监控系统设计 6 基于物联网技术xxx电力系…

鸿蒙认证值得考吗?

鸿蒙认证值得考吗&#xff1f; 鸿蒙认证&#xff08;HarmonyOS Certification&#xff09;是华为为了培养和认证开发者在鸿蒙操作系统&#xff08;HarmonyOS&#xff09;领域的专业技能而设立的一系列认证项目。这些认证旨在帮助开发者和企业工程师提升在鸿蒙生态中的专业技能…

通过混合栅极技术改善p-GaN功率HEMTs的ESD性能

来源&#xff1a;Improved Gate ESD Behaviors of p-GaN PowerHEMTs by Hybrid Gate Technology&#xff08;ISPSD 24年&#xff09; 摘要 本工作中&#xff0c;首次证明了混合栅极技术在不增加额外面积和寄生效应的前提下&#xff0c;能有效提升p-GaN HEMTs的栅极静电放电(E…

刷代码随想录有感(124):动态规划——最长公共子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>>dp(nums1.size() 1, vector<int>(nums2.size() 1, 0));int res 0;for(int i 1; i <…

[单master节点k8s部署]16.监控系统构建(一)Prometheus介绍

prometheus prometheus是继k8s之后&#xff0c;第二个被托管到CNCF的项目&#xff0c;是一个开源的监控报警系统。 1.prometheus支持多维数据模型&#xff0c;每一个时间序列数据都由metric度量指标名称和它的标签label组成一组键值对。 2.Prometheus有自己的PromQL查询语言…

mac|Mysql WorkBench导入文件失败(修改编码)

⚠️&#xff1a;表格中有中文的不适用表格中有中文的不适用表格中有中文的不适用表格中有中文的不适用 我有一个excel表&#xff0c;想导入到mysql数据库中&#xff0c;但是Workbench的导入格式只支持csv&#xff0c;通过excel、wps将excel另存为csv文件进行导入 导入会因为编…

Swift 中强大的 Key Paths(键路径)机制趣谈(下)

概览 在上一篇博文 Swift 中强大的 Key Paths(键路径)机制趣谈(上)中,我们介绍了 Swift 语言中键路径机制的基础知识,并举了若干例子讨论了它的一些用武之地。 而在本文中我们将再接再厉,继续有趣的键路径大冒险,为 KeyPaths 画上一个圆满的句号。 在本篇博文中,您将…

高考服务系统

摘 要 每年有大批考生在进行填写高考志愿时并不很清楚自己的高考分数适合那些高校以及专业。高考考生面临着未被高校录取&#xff0c;被调剂专业&#xff0c;甚至可能复读的问题。若能让考生轻松查询到高校录取、高校专业、高校招生等相关信息&#xff0c;能减少很大一部分考生…

2007-2023年36家商业银行绿色信贷、期末贷款总额、银行总资产等相关指标数据(2023年无缺失)

2007-2023年36家商业银行绿色信贷数据&#xff08;2023年无缺失&#xff09; 1.时间&#xff1a;2007-2023年&#xff0c;2023年无缺失 2.来源&#xff1a;银行年报和社会责任报告 3.指标:绿色信贷余额、期末贷款总额、绿色信贷比率、总资产收益率、流动性比率、拨备覆盖率、…

svn忽略上传文件node_modules文件

文章目录 1.点击svn项目右键-》选中svn的属性2. 点击 新建3. 点击其他4. 选择属性 svn:global-ignores5. 输入忽略文件 1.点击svn项目右键-》选中svn的属性 2. 点击 新建 3. 点击其他 4. 选择属性 svn:global-ignores 5. 输入忽略文件

通信软件开发之业务知识:PON口割接什么意思?

一 PON口割接&#xff08;原创总结&#xff09; 在通信领域&#xff0c;PON口割接指的是对无源光网络&#xff08;Passive Optical Network&#xff0c;PON&#xff09;端口进行的切换或调整操作。简单来说&#xff0c;就是对光纤网络中的某个端口进行重新连接或重新分配&…

C++基础(四):C++入门(三)

通过前面的学习&#xff0c;我们已经掌握了一些最基本的C入门知识&#xff0c;这一篇博客我们主要聚焦于&#xff1a;C/C内存管理和C11的一些新特性&#xff0c;为后续深入学习做好铺垫。 目录 一、C/C内存管理 1.1 C/C内存分布 1.2 C语言中动态内存管理方式&#xff1a;ma…

漆包线行业生产管理革新:万界星空科技MES系统解决方案

一、引言 在科技日新月异的今天&#xff0c;万界星空科技凭借其在智能制造领域的深厚积累&#xff0c;为漆包线行业量身打造了一套先进的生产管理执行系统&#xff08;MES&#xff09;解决方案。随着市场竞争的加剧&#xff0c;漆包线作为电气设备的核心材料&#xff0c;其生产…

再回首,什么是人工智能?

文章目录 一、说明二、什么是人工智能&#xff1f;三、人工智能的类型&#xff1a;弱人工智能与强人工智能四、深度学习与机器学习五、生成模型的兴起六、人工智能应用6.1 语音识别6.2 客户服务6.3 计算机视觉6.4 供应链6.5 天气预报6.6 异常检测 七、人工智能的历史&#xff1…