web-dev-qa-db-ja.com

JWTトークンの無効な署名

アプリケーションでログイン認証プロセスにJWTを使用しています。私が使用しているトークンを生成するには:

Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact();

生成されたトークン:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-aU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyVvcjcvrcvcvccVc0cVcVc0cVc0cVcVcOcVc

このトークンをjwt.ioデバッガーでデコードすると、無効な署名が表示されます。認証に使用しているペイロードでユーザー名を確認できるため、この失敗の理由を見つけることができません。誰かが私に問題を指摘できますか?コードで何かを変更する必要がありますか?

6
Mohit224

MacProvider.generateKey()は、使用するたびに新しいランダム署名を生成します。一度生成して保存する必要があります。キーは、トークンの署名と検証に使用されます。

キーを保存しないと、トークンを検証できません。これは、jwt.ioの問題です。 署名キーを提供する必要があります。あなたのケースでは、表現できない文字を含むことができるランダムなキーを使用して(パスフレーズも使用できますが、お勧めできません)、それをbase64にエンコードします。次に、jwt.ioでチェックをマークしてトークンを確認します

Key key =MacProvider.generateKey();
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded());
5
pedrofb