アプリケーションでログイン認証プロセスにJWTを使用しています。私が使用しているトークンを生成するには:
Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact();
生成されたトークン:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-aU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyVvcjcvrcvcvccVc0cVcVc0cVc0cVcVcOcVc
このトークンをjwt.ioデバッガーでデコードすると、無効な署名が表示されます。認証に使用しているペイロードでユーザー名を確認できるため、この失敗の理由を見つけることができません。誰かが私に問題を指摘できますか?コードで何かを変更する必要がありますか?
MacProvider.generateKey()
は、使用するたびに新しいランダム署名を生成します。一度生成して保存する必要があります。キーは、トークンの署名と検証に使用されます。
キーを保存しないと、トークンを検証できません。これは、jwt.ioの問題です。 署名キーを提供する必要があります。あなたのケースでは、表現できない文字を含むことができるランダムなキーを使用して(パスフレーズも使用できますが、お勧めできません)、それをbase64にエンコードします。次に、jwt.ioでチェックをマークしてトークンを確認します
Key key =MacProvider.generateKey();
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded());