2017-06-25 21 views
0
私はvert.xアプリケーションにJWT認証を追加しようとしています

vert.x失敗し、これは私がこれまでにやっていることです。次のコマンドで
生成したキーストア:署名の検証が

のkeytool -genseckey -keystore keystore.jceks -storetype JCEKS -storepass秘密-keyalg HMACSHA256 -keysize 2048 -alias HS256 -keypass秘密

それがhere推奨されます。

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

とAPIルートの追加のハンドラ:今

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

、私は認証にいくつかのベアラトークンで要求を送信していたときにその後、私のstartメソッドでは、私はJWTAuthインスタンスを初期化した
私は得る:

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の初期化中に問題があると思います。

答えて

0

表示されているエラーは、site you linkedのようにトークンの解析が正しいことを意味しますが、署名はトークンの内容と一致しませんでした。

カスタム署名でJWTを初期化しているため、自分で発行したトークンのみを検証できます。どのようにトークンを発行していますか?

つまり、このモードを使用すると、自分で作成したトークンのみを検証できます。

+0

トークンはspring-security-jwtで作成されます。プロセスは基本的に 'Signer signer = new MacSigner(secret);で終わります。 Jwt jwt = JwtHelper.encode(content、signer); ' 私は基本的に私がトークンを解読できることを意味する秘密を知っています。私は二重チェックして、トークンの署名プロセスで使用される秘密がvert.xアプリケーションで署名をチェックするときと同じであることを確認しました。 –

+0

検証が署名される前に 'mac.init(sk);'を追加して 'Crypto'クラスの' sign'メソッドを修正したときに、macが初期化されていません。私はそれらの暗号化のもので良いことではない、あなたは私の提案を確認できますか? –

+0

'sk'変数とは何ですか?変更されたコードを共有できますか? –

関連する問題