Java 签名验证在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-

我正在尝试将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-别名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(内容,签名者)mac.init(sk)修改
Crypto
类中的
sign
方法时,mac未被初始化sk
变量是什么?你能分享你修改过的代码吗?你试图通过替换私钥来实现什么?为了解决你的问题,我们需要密钥库文件+无法解码的令牌,因为一切似乎都是正确的。
WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed