2017-05-21 2 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 플러그인을 올바르게 구성 할 수 있습니까?

추신 : 나는 공유 비밀을 사용하는 것이 좋습니다. 더 좋은 방법이 있다면 알려주십시오. 감사!

  • 홍콩 버전 v0.10.2

답변

0

당신은 개인 - 공개 키 서명 방법을 사용할 수 있습니다.
개인 키으로 JWT 토큰을 만들고 공개 키을 다른 모든 마이크로 서비스와 공유하십시오. 다른 마이크로 서비스는 공유 공개 키를 사용하여 토큰의 서명을 확인할 수 있습니다.

RSA 알고리즘을 사용하여 토큰에 서명하는 & 키를 생성 할 수 있습니다. 개인 키는 토큰을 생성하는 서비스에만 있어야합니다. 생성 키

니펫

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

니펫 JWT 토큰을 생성한다. 나는 토큰을 생성 JJwt API를 사용하고 있습니다 :

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

발췌문이 공개 키 토큰을 확인 :이 도움이

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

희망을.