gpt4 book ai didi

java - 使用 JWT (java-jwt) 验证签名

转载 作者:行者123 更新时间:2023-12-04 00:32:04 25 4
gpt4 key购买 nike

我必须使用 java-jwt 库验证签名,我有 token 和公钥,公钥从 ssh-rsa AA 开始......
而且我必须使用 RSA256 算法,当我检查 github 时,我发现以下

Algorithm algorithm = Algorithm.RSA256(publicKey, privateKey);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.build(); //Reusable verifier instance
DecodedJWT jwt = verifier.verify(token);

但是我的公钥是字符串形式,我没有私钥。请建议我如何验证签名。

最佳答案

使用非对称 key 加密时,我们需要私钥来创建签名和公钥来验证。
来回答你的问题

1.私有(private)不存在

很好,您不需要私钥来验证签名 .关于您正在使用的库,它的变量 args 。这意味着您可以根据签名/验证仅通过一个。下面是只使用公钥的java方法。

    public boolean verifyToken(String token,RSAPublicKey publicKey){
try {
Algorithm algorithm = Algorithm.RSA256(publicKey, null);
JWTVerifier verifier = JWT.require(algorithm)
//more validations if needed
.build();
verifier.verify(token);
return true;
} catch (Exception e){
System.out.println("Exception in verifying "+e.toString());
return false;
}
}

2.公钥是字符串格式,不是java PublicKey格式。

你需要一个机制来 转换 将您的公钥字符串文件转换为 Java PublicKey 格式。以下是我可以建议的一种方法。
    public static RSAPublicKey getPublicKeyFromString(String key) throws 
IOException, GeneralSecurityException {

String publicKeyPEM = key;

/**replace headers and footers of cert, if RSA PUBLIC KEY in your case, change accordingly*/
publicKeyPEM = publicKeyPEM.replace("-----BEGIN PUBLIC KEY-----\n", "");
publicKeyPEM = publicKeyPEM.replace("-----END PUBLIC KEY-----", "");

byte[] encoded = Base64.decodeBase64(publicKeyPEM);
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPublicKey pubKey = (RSAPublicKey) kf.generatePublic(new X509EncodedKeySpec(encoded));

return pubKey;
}

关于java - 使用 JWT (java-jwt) 验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693409/

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