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
の初期化中に問題があると思います。
トークンはspring-security-jwtで作成されます。プロセスは基本的に 'Signer signer = new MacSigner(secret);で終わります。 Jwt jwt = JwtHelper.encode(content、signer); ' 私は基本的に私がトークンを解読できることを意味する秘密を知っています。私は二重チェックして、トークンの署名プロセスで使用される秘密がvert.xアプリケーションで署名をチェックするときと同じであることを確認しました。 –
検証が署名される前に 'mac.init(sk);'を追加して 'Crypto'クラスの' sign'メソッドを修正したときに、macが初期化されていません。私はそれらの暗号化のもので良いことではない、あなたは私の提案を確認できますか? –
'sk'変数とは何ですか?変更されたコードを共有できますか? –