2017-09-27 11 views
0

一連のWebサービスの認証プロセスでJJWTを使用するように設定しました。問題は、1つのWebサービスで作成されたものの、複数のサービスで認証されていることです。私のウェブサービスがすべて同じ署名を使用して、着信JWTを検証することを保証しながら、署名を首尾よく安全に使用する方法はありますか?Webサービス間でJJWT署名を共有する

// We need a signing key, so we'll create one just for this example. Usually 
// the key would be read from your application configuration instead. 
Key key = MacProvider.generateKey(); 

String compactJws = Jwts.builder() 
    .setSubject("Joe") 
    .signWith(SignatureAlgorithm.HS512, key) 
    .compact(); 

私はしかし、私は、標準のJava Stringを(文字通り)を使用することは十分に確保されていないことに気付かされました.signWith(Algorithm,String)に、昔ながらの文字列を使用することができることを知っています。私は、に似ものを用いた:

String compactJws = Jwts.builder() 
    .setSubject("Joe") 
    .signWith(SignatureAlgorithm.HS512, "shared complex passphrase") 
    .compact(); 

答えて

1

RFC 7518によれば - JSONウェブアルゴリズム(JWA)用

ハッシュ出力と同じサイズのキー(例えば、256ビット "HS256")以上をこのアルゴリズムで使用する必要があります。 (この の要件は、NIST SP 800-117(Sic)[NIST.800-107]のセクション5.3.4(HMAC キーのセキュリティ効果)に基づいています。 有効なセキュリティ強度はセキュリティ強度の最小値である キーと内部ハッシュ値の2倍のサイズ)。

HS512で512ビット以上のキーを使用する必要があります。

キーをランダムに選択する必要があります。 MacProvider.generateKey();または他のランダムジェネレータを使用してキーを生成し、サーバーに配布することができます(たとえば、base64でエンコードされます)。

代わりに、RSAキーペアを使用しています。秘密鍵を使用して、トークンと公開鍵を署名して検証します。すべてのサービスで公開鍵を安全に公開して使用できます。

https://security.stackexchange.com/questions/95972/what-are-requirements-for-hmac-secret-key

関連する問題