今天我开始关注Kong以及它如何通过插件提供一些功能。我正在阅读[在此处输入链接描述] [插件]页面并开始查看JWT。
Kong似乎提供了这些终点(而不仅仅是):
一旦激活,Kong将验证JWT(和声明)的有效性,并在请求有效时转发给API端点。
以下是我的问题:
由于JWT还用于携带信息(例如客户ID,客户角色),以便在每次API中始终都有用户信息的子集而无需每次查询DB或其他端点,每个API如何解析JWT令牌并提取其中的信息?
想象一下,我想创建一个与Kong交互的单页面应用程序,它隐藏了许多微服务。哪个是使用JWT的最佳方法,每个后端微服务可以解析JWT令牌以检索例如发出请求的用户ID?
kong是否提供api来解析JWT令牌?
答案 0 :(得分:0)
您可以使用像JJWT这样的JWT库来解码API端点实现中的令牌,也可以使用专门的微服务来解码它
您在对用户进行身份验证时会生成并访问令牌,然后在每个请求的标头中将其发送。这样,您的微服务可以通过#1
看起来不像
答案 1 :(得分:0)
请检查以下链接,该插件将解析您的JWT令牌并对其进行解码: https://github.com/wego/kong-jwt-claim-headers
如果您需要帮助来设置jwt插件,请检查: Kong-auth0-jwt
答案 2 :(得分:0)
另一种选择是使用kong-oidc并将其部署为资源服务器,验证OAuth 2.0 JWT令牌。
答案 3 :(得分:0)
我有类似的要求。我是通过在我的spring-boot应用程序中添加JwtFilter
来实现的,该应用程序将提取JWT令牌,对其进行解析并将其设置在SecurityContextHolder
中。我可以通过在任何需要的地方从SecurityContextHolder
获取令牌来提取用户信息。不过,我面临的挑战是确定用于注册JWT的secret
,因为我无法控制它在消费者端的生成方式。
答案 4 :(得分:0)
实际上,一旦Kong验证了与消费者相关联的JWT令牌,它将在请求标头中放置额外的信息,例如x-consumer-custom-id
,x=consumer-username
,x-consumer-groups
等……>
如果您愿意为数据库中的每个用户添加一个消费者条目,请将消费者的定制ID与数据库的真实用户ID相关联。
然后,对于每个请求,您将能够识别谁是发行者。
如果您想了解更多信息,但仍想使用JWT插件,则必须使用其他组件(JWT库,第三方服务等)。