JWT知识

本文介绍了JWT(JsonWebToken)的构成,包括Header、Payload和Signature的生成过程,以及在Java中的具体实现,涉及JJWT库的使用、依赖管理,以及如何处理RSA算法和自定义安全密钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT概念

JWT组成

Java实现JWT

Header

String getHeader() {
    String header = "{\"alg\":\"HS256\",\"typ\":\"JWT\"}";
    String encodeBase64URLSafeString = Base64.encodeBase64URLSafeString(header.getBytes(StandardCharsets.UTF_8));
    System.out.println(encodeBase64URLSafeString);
}

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

PayLoad

void getPayLoad(){
    String payload = "{\"sub\":\"7isi\",\"id\":\"1001\",\"role\":\"admin\"}";
    String encodeBase64URLSafeString = Base64.encodeBase64URLSafeString(payload.getBytes(StandardCharsets.UTF_8));
    System.out.println(encodeBase64URLSafeString);
}

eyJzdWIiOiI3aXNpIiwiaWQiOiIxMDAxIiwicm9sZSI6ImFkbWluIn0

Signature

@Test
void generatesignature() throws NoSuchAlgorithmException, InvalidKeyException {
    String secret = UUID.randomUUID().toString().replaceAll("-", "");
    String data = getHeader() +"." + getPayLoad();

    Mac mac = Mac.getInstance("HmacSHA256");
    SecretKeySpec spec = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8),"HmacSHA256");
    mac.init(spec);
    byte[] bytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
    String res = Base64.encodeBase64URLSafeString(bytes);
    
    String jwt = data + "." + res;
    System.out.println(jwt);
}

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3aXNpIiwiaWQiOiIxMDAxIiwicm9sZSI6ImFkbWluIn0.vpwacNY4fLdQzF7iSDyGLnYMqbgBoWRVLNG7Ail15Ss

验证签名值

计算出来和原来的对比,我们的secreat是早就准备好的

Web中使用JWT

JJWT

依赖

<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.70</version>
            <scope>runtime</scope>
        </dependency>

例子

生成jws

RSA算法的支持

JWT安全密钥实现

以下是jwt,没有签名,文档错误

自定义key

压缩

获取jwt的数据

add是往后添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值