签名验证失败vert.x

时间:2017-06-25 19:23:31

标签: java jwt vert.x

我正在尝试将JWT身份验证添加到我的vert.x应用程序中,这是我到目前为止所做的:
使用以下命令生成密钥库:

  

keytool -genseckey -keystore keystore.jceks -storetype jceks   -storepass secret -keyalg HMacSHA256 -keysize 2048 -alias HS256 -keypass secret

建议使用here 然后在我的start方法中,我初始化了JWTAuth实例:

jwt = JWTAuth.create(vertx, new JsonObject()
                    .put("keyStore", new JsonObject()
                    .put("type", "jceks")
                    .put("path", "keystore.jceks")
                    .put("password", "secret")));

并添加了api route的处理程序:

router.route("/api/create_room")
            .blockingHandler(JWTAuthHandler.create(jwt));

现在,当我在Authorization标头中发送带有一些Bearer令牌的请求时,我得到:

WARNING: JWT decode failure
java.lang.RuntimeException: Signature verification failed

我测试了令牌here,并说明签名已经过正确验证 我做错什么了吗 ?或者它是vert.x库中的错误?

UPD

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用于测试目的。我想在cryptoMap初始化期间出现了问题。

1 个答案:

答案 0 :(得分:0)

您看到的错误意味着根据site you linked解析令牌是正确的,但签名与令牌的内容不匹配。

您正在使用自定义签名初始化JWT,因此您只能验证自己发布的令牌。你是如何发行代币的?

换句话说,使用此模式只能验证自己创建的令牌。