2017-10-04 19 views
1

ログイン認証プロセスのために私のアプリケーションでJWTを使用しています。JWTトークンが無効な署名

トークン生成
Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact(); 

::私はこのトークンをデコードするとき

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-AU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyZiz0fYZwViHr113ms8TNvngcJcV07U4hK-RBZQ

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

+0

jwt.ioの署名を解読するために 'MacProvider.generateKey() 'で生成されたキーを提供しましたか? – lztachyon

答えて

1

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

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

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

これは意味をなさない。ありがとう。 – Mohit224