0

我最近在玩 KONG API 网关。

我想用一个在所有 micros 中共享的秘密来签署每个 JWT。我需要这个,因为我希望其他 micros 能够解码给定的 JWT 并提取有效负载数据并对其进行处理(例如有效负载中的 _user_id_ 字段)。

当我尝试为第一个消费者创建 JWT 时,它工作得很好。但是当我尝试为第二个消费者创建它时,我收到以下错误:

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

我不确定,但我认为 KONG/JWT 需要每个消费者唯一的秘密来创建 JWT。是否可以正确配置 JWT 插件以便能够使用共享密钥来签署 JWT?

PS:我不完全确定使用共享密钥是一种好习惯。如果有更好的方法来做到这一点,请告诉我。谢谢!

  • 港版v0.10.2
4

1 回答 1

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)

希望这可以帮助。

于 2017-06-05T11:56:02.193 回答