JWT / KONG:无法使用共享密钥创建JWT

时间:2017-05-21 11:23:30

标签: jwt microservices kong

我最近在KONG API网关上玩。

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

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

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

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

PS:我不完全确定使用共享秘密是一种很好的做法。如果有更好的方法,请告诉我。谢谢!

  • Kong version v0.10.2

1 个答案:

答案 0 :(得分: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)

希望这有帮助。