我最近在KONG API网关上玩。
我想用一个在所有微观上共享的秘密签署每个JWT。我需要这个,因为我希望其他微处理器能够解码给定的JWT并提取有效载荷数据并对其进行处理(例如有效载荷中的_user_id_字段)。
当我尝试为第一个消费者创建一个JWT时,它运行得很好。但是当我尝试为第二个消费者创建它时,我收到以下错误:
{u'secret': u"already exists with value 'secret'}
我不确定,但我认为KONG / JWT需要每个消费者创建JWT的独特秘密。是否可以正确配置JWT插件以便能够使用共享密钥对JWT进行签名?
PS:我不完全确定使用共享秘密是一种很好的做法。如果有更好的方法,请告诉我。谢谢!v0.10.2
答案 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)
希望这有帮助。