gpt4 book ai didi

java - 创建 JWT token 时出现问题

转载 作者:行者123 更新时间:2023-12-01 21:17:18 26 4
gpt4 key购买 nike

我有一个 Java Spring 应用程序,我试图在其中创建 JWT token ,但收到以下错误:

java.security.InvalidKeyException:IOException:DerInputStream.getLength():lengthTag=111,太大。

代码如下:

public static String createJwt(String publicKey, String privateKey, String issuer, String userId) throws AuthenticationException {
try {
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) getPrivateKey(privateKey);
RSAPublicKey rsaPublicKey = (RSAPublicKey) getPublicKey(publicKey);
Algorithm algorithm = Algorithm.RSA256(rsaPublicKey, rsaPrivateKey);
long now = System.currentTimeMillis();
return JWT.create()
.withIssuer(issuer)
.withJWTId(userId)
.withIssuedAt(new Date(now))
.withExpiresAt(new Date(now + 15 * 60 * 1000))
.sign(algorithm);
} catch (JWTCreationException e) {
log.error("Jwt secure token creation failed. Exception: ", e);
throw new AuthenticationException("JWT creation failed");
}
}

private static PublicKey getPublicKey(String base64Key) {
byte[] rawKey = Base64.decodeBase64(base64Key);
X509EncodedKeySpec ks = new X509EncodedKeySpec(rawKey);
KeyFactory kf;
try {
kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(ks);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new WebApplicationException("Client Configuration issue. Public key error", Response.Status.SERVICE_UNAVAILABLE);
}
}

private static PrivateKey getPrivateKey(String base64Key) {
byte[] rawKey = Base64.decodeBase64(base64Key);
PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(rawKey);
KeyFactory kf;
try {
kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(ks);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new WebApplicationException("Client Configuration issue. Private key error", Response.Status.SERVICE_UNAVAILABLE);
}
}

错误在以下行抛出:kf.generatePublic(ks)kf.generatePrivate(ks)

我正在使用 512 位 RSA key ( https://csfieldguide.org.nz/en/interactives/rsa-key-generator/ )

-----BEGIN PRIVATE KEY-----
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAlU2XVqKMxVkkBGM/
C/fTpAIe2oCSDGxRcAyEUsyO8N0LVJOGv3cGK6C4eoaPxvmPaMDBagYe2CcEGnaY
06l4kwIDAQABAkAHnj3qncCxEStVTfsZkTurUrBgVc8d8yj0nq7hyq5Ae/I77SKj
ZwDfberj+KDX185w9ehNmf93fkiBXtIiJd0BAiEA/5saOhZUxh7OveLugHdwHNOY
R1B/3T6vc4kXMWeYf4kCIQCViIbiDg+MuZ73/3B+vR0tUXTva2pO9YFdJj9J82p0
OwIgJcHyqNv9n9qTLaelFaMPE6MKHpa8nKES5907aNflxgkCIHI8/28r9s038i7c
w4DP0b6RgJh4o5r3DIGxeqBwil+JAiBDeBJgON+HvDP8ab5SAyPDBA+/WTTLdSag
X6vUH20ANw==
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJVNl1aijMVZJARjPwv306QCHtqAkgxs
UXAMhFLMjvDdC1SThr93BiuguHqGj8b5j2jAwWoGHtgnBBp2mNOpeJMCAwEAAQ==
-----END PUBLIC KEY-----

将其传递给 createJwt 函数。

我做错了什么?

最佳答案

我能够解决这个问题。从私钥和公钥中删除页眉和页脚,即:

私钥:

MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAlU2XVqKMxVkkBGM/
C/fTpAIe2oCSDGxRcAyEUsyO8N0LVJOGv3cGK6C4eoaPxvmPaMDBagYe2CcEGnaY
06l4kwIDAQABAkAHnj3qncCxEStVTfsZkTurUrBgVc8d8yj0nq7hyq5Ae/I77SKj
ZwDfberj+KDX185w9ehNmf93fkiBXtIiJd0BAiEA/5saOhZUxh7OveLugHdwHNOY
R1B/3T6vc4kXMWeYf4kCIQCViIbiDg+MuZ73/3B+vR0tUXTva2pO9YFdJj9J82p0
OwIgJcHyqNv9n9qTLaelFaMPE6MKHpa8nKES5907aNflxgkCIHI8/28r9s038i7c
w4DP0b6RgJh4o5r3DIGxeqBwil+JAiBDeBJgON+HvDP8ab5SAyPDBA+/WTTLdSag
X6vUH20ANw==

和公钥:

MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJVNl1aijMVZJARjPwv306QCHtqAkgxs
UXAMhFLMjvDdC1SThr93BiuguHqGj8b5j2jAwWoGHtgnBBp2mNOpeJMCAwEAAQ==

希望这可以帮助其他面临此问题的人!!

关于java - 创建 JWT token 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863944/

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