Java 签名验证在vert.x中失败
我正在尝试将JWT身份验证添加到我的vert.x应用程序中,这就是我迄今为止所做的:Java 签名验证在vert.x中失败,java,jwt,vert.x,Java,Jwt,Vert.x,我正在尝试将JWT身份验证添加到我的vert.x应用程序中,这就是我迄今为止所做的: 使用以下命令生成密钥库: WARNING: JWT decode failure java.lang.RuntimeException: Signature verification failed keytool-genseckey-keystore keystore.jceks-storetype jceks -storepass secret-keyalg HMacSHA256-keysize 2048-
使用以下命令生成密钥库:
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
keytool-genseckey-keystore keystore.jceks-storetype jceks
-storepass secret-keyalg HMacSHA256-keysize 2048-别名HS256-keypass secret
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
正如推荐的那样。然后在我的start方法中初始化了JWTAuth实例:
jwt = JWTAuth.create(vertx, new JsonObject()
.put("keyStore", new JsonObject()
.put("type", "jceks")
.put("path", "keystore.jceks")
.put("password", "secret")));
router.route("/api/create_room")
.blockingHandler(JWTAuthHandler.create(jwt));
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
并为api路由添加了处理程序:
jwt = JWTAuth.create(vertx, new JsonObject()
.put("keyStore", new JsonObject()
.put("type", "jceks")
.put("path", "keystore.jceks")
.put("password", "secret")));
router.route("/api/create_room")
.blockingHandler(JWTAuthHandler.create(jwt));
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
现在,当我发送一个请求时,在授权头中有一些承载令牌,我得到:
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
我已经测试了令牌,它表明签名已正确验证。我做错什么了吗?或者它是vert.x库中的一个bug
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
UPD
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
private static final String DEFAULT_ALGORITHM = "HMACSHA256";
@Override
public synchronized byte[] sign(byte[] payload) {
SecretKey sk = new SecretKeySpec("secret".getBytes(), DEFAULT_ALGORITHM);
try {
mac.init(sk);
return mac.doFinal(payload);
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
显然,我添加sk是为了测试。我猜在
加密映射
初始化过程中出现问题。您看到的错误意味着根据的令牌解析是正确的,但是签名与令牌的内容不匹配
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
您正在使用自定义签名初始化JWT,因此只能验证您自己发行的令牌。您是如何发行代币的
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed
换句话说,使用此模式只能验证您自己创建的令牌。这些令牌是使用spring security jwt创建的。这个过程基本上以
Signer-Signer=new-MacSigner(secret)结束;Jwt Jwt=JwtHelper.encode(内容,签名者)但是我知道这个秘密,这基本上意味着我可以解码这个令牌。我已经仔细检查并确保令牌签名过程中使用的秘密与在vert.x应用程序中检查签名时使用的秘密相同。当我通过添加mac.init(sk)修改Crypto
类中的sign
方法时,mac未被初始化签名前,验证返回true。我不太擅长那些加密的东西,你能验证我的建议吗?sk
变量是什么?你能分享你修改过的代码吗?你试图通过替换私钥来实现什么?为了解决你的问题,我们需要密钥库文件+无法解码的令牌,因为一切似乎都是正确的。
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed