gpt4 book ai didi

java - 如何使用 Java 中的 secret Base64 编码创建 JWT

转载 作者:行者123 更新时间:2023-12-03 08:52:12 24 4
gpt4 key购买 nike

使用在线 JWT 调试器对 JWT token 进行编码和解码,我创建了这个简单的 token

https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IlNvbHIifQ.5T7L_L1MPfQ_5FjKGa1fTPqrzwK4bNSM812nW6oyjb8

对 token 进行编码的 secret 是
qwertypassword

header 为{ "alg": "HS256"}

有效负载为{ "sub": "admin", "aud": "Solr"}

当您使用非 Base64 编码的 key 进行编码时,它会生成 JWTeyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IlNvbHIifQ.5T7L_L1MPfQ_5FjKGa1fTPqrzwK​​4bNSM812nW6oyjb8

当 secret 是 Base64 编码时,它会生成 JWTeyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IlNvbHIifQ.SWCJDd6B_m7xr_puQH-wgbxvXyJYXH9lTpldOU0eQKc

以下是当 secret 未经过 Base64 编码时生成 JWT 的 Java 代码。

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
public class JWTEncodeTest {
public static void main(String[] args) {
try {
String secretkey="qwertypassword";

//The JWT signature algorithm we will be using to sign the token
String jwtToken = Jwts.builder()
.setSubject("admin")
.setAudience("Solr")
.signWith(SignatureAlgorithm.HS256,secretkey.getBytes()).compact();

System.out.println("jwtToken=");
System.out.println(jwtToken);
} catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}

在这段 Java 代码中我缺少什么来生成 JWT,并使用 secret 的 Base64 编码来生成 JWT 值

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IlNvbHIifQ.SWCJDd6B_m7xr_puQH-wgbxvXyJYXH9lTpldOU0eQKc

最佳答案

jwt.io secret base64编码的含义实际上,它会将您提供的 secret 视为 Base64 编码,因此在实际使用之前首先对其进行解码。重点不是创建任何不同的东西,而只是在加密 secret 时对其进行解码。

您使用的 secret 显然是未编码形式:

qwertypassword

当你对它进行base64编码时,例如。在https://www.base64encode.org/的帮助下,您将得到这个base64编码值:

cXdlcnR5cGFzc3dvcmQ=

关于jwt.io您可以使用这两种形式:

  • 第一个未编码,具有 base64 编码的 secret 复选框未选中

  • 第二个,base64 编码,并且选中复选框

在这两种情况下,您都会得到相同的结果。

对于您的 java 代码,在使用它进行签名之前,需要额外的步骤来解码编码的 secret :

import java.util.Base64;

String base64EncodedSecret = "cXdlcnR5cGFzc3dvcmQ=";
byte[] decodedSecret = Base64.getDecoder().decode(base64EncodedSecret);

然后,当您创建 JWT 时,您可以使用解码后的 secret :

.signWith(SignatureAlgorithm.HS256, decodedSecret)

但这只是必要的,如果您出于某种原因以编码形式获得了 secret 。

关于java - 如何使用 Java 中的 secret Base64 编码创建 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com