2017-05-21 31 views
0

最近KONG APIゲートウェイで遊んでいます。JWT/KONG:共有秘密のJWTを作成できません。

すべてのマイクロで共有される秘密で各JWTに署名したいと思います。私は、他のマイクロが所与のJWTを解読し、ペイロードデータを抽出してそれを処理できるようにしたいので、これが必要です(ペイロードの_user_id_フィールドなど)。

最初の消費者用のJWTを作成しようとすると、うまく動作します。私は次のエラー取得しています第二消費者のためにそれを作成しようとすると、しかし:

{u'secret': u"already exists with value 'secret'}

を私は正確にはわからないが、私はKONG/JWTは、JWTを作成するために、各消費者のためのユニークな秘密を必要だと思います。 JWTに署名するために共有秘密を使用できるようにJWTプラグインを正しく設定することは可能ですか?

PS:共有秘密を使用することが良い方法であるとは必ずしも言えません。これを行うより良い方法があれば教えてください。ありがとう!

  • 香港版v0.10.2

答えて

0

あなたは秘密公開鍵署名方式を使用することができます。
秘密鍵を使用してJWTトークンを作成し、公開鍵を他のすべてのマイクロサービスと共有します。他のマイクロサービスは、共有公開鍵を使用してトークンの署名を検証できます。

トークンに署名する鍵&を生成するためにRSAアルゴリズムを使用できます。秘密鍵は、トークンを生成しているサービスでのみ使用する必要があります。 JWTトークンを生成するために

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
    kpg.initialize(2048); 
    KeyPair kp = kpg.genKeyPair(); 
    Key publicKey = kp.getPublic(); 
    Key privateKey = kp.getPrivate(); 

スニペット:鍵を生成するため

スニペット。私は、トークンを生成するためのJJwtのAPIを使用しています:

Jwts.builder() 
      .setClaims(payload) 
      .setExpiration(expiryDate) 
      .signWith(SignatureAlgorithm.RS256, privateKey) 
      .compact(); 

スニペットの公開鍵でトークンを検証する:

Jwts.parser() 
     .setSigningKey(publicKey) 
     .parseClaimsJws(jwtToken) 

・ホープ、このことができます。

関連する問題