Java Kong和JWT-API应该如何从令牌中提取信息

Java Kong和JWT-API应该如何从令牌中提取信息,java,spring-boot,jwt,kong,Java,Spring Boot,Jwt,Kong,今天我开始研究Kong,以及它如何通过插件提供一些功能。我正在阅读[enter link description here][Plugins]页面,开始查看JWT 似乎Kong提供了这些端点(不仅仅是): 创造消费者 创建/删除JWT凭证 使用从步骤2获取的凭证生成JWT令牌 一旦激活,Kong将验证JWT(和声明)的有效性,并将请求转发给API端点(如果有效) 以下是我的问题: 由于JWT还用于携带信息(例如客户ID、客户角色),以便在每个API中始终包含用户信息的子集,而无需每次查询DB

今天我开始研究Kong,以及它如何通过插件提供一些功能。我正在阅读[enter link description here][Plugins]页面,开始查看JWT

似乎Kong提供了这些端点(不仅仅是):

  • 创造消费者
  • 创建/删除JWT凭证
  • 使用从步骤2获取的凭证生成JWT令牌
一旦激活,Kong将验证JWT(和声明)的有效性,并将请求转发给API端点(如果有效)

以下是我的问题:

  • 由于JWT还用于携带信息(例如客户ID、客户角色),以便在每个API中始终包含用户信息的子集,而无需每次查询DB或其他端点,因此每个API如何解析JWT令牌并提取其中的信息

  • 想象一下,我想创建一个单页应用程序,与隐藏了许多微服务的Kong交互。哪个是使用JWT的最佳方式,每个后端微服务都可以解析JWT令牌,以便检索例如发出请求的用户ID

  • kong是否提供了解析JWT令牌的api

  • 您可以使用JWT库(例如JJWT)来解码API端点实现中的令牌,也可以使用专用的微服务来解码令牌

  • 您将在对用户进行身份验证时生成并访问令牌,然后在每个请求的头中发送该令牌。这样,您的微服务可以通过#1中描述的选项之一验证用户

  • 看起来不像


  • 请检查以下链接,插件将解析您的JWT令牌并对其进行解码:

    此外,如果您需要帮助来设置jwt插件,请检查:

    另一种选择是将其作为资源服务器使用和部署,验证OAuth 2.0 JWT令牌。

    我也有类似的要求。我通过在我的spring boot应用程序中添加
    JwtFilter
    实现了这一点,它将提取JWT令牌,解析它并在
    SecurityContextHolder
    中设置它。我可以根据需要从
    SecurityContextHolder
    获取令牌来提取用户信息。不过,我面临的挑战是识别注册JWT时使用的
    秘密
    ,因为我无法控制它是如何在消费者端生成的。

    事实上,一旦Kong验证与消费者关联的JWT令牌,它将在请求头中添加额外信息,如
    x-consumer-custom-id
    x=消费者用户名
    x-消费者群体
    ,等等

    如果您愿意为数据库中的每个用户添加消费者条目,请将消费者的自定义id与数据库的真实用户id相关联

    然后,对于每个请求,您将能够确定谁是发行人

    如果您想了解更多信息,但仍想使用JWT插件,则必须使用额外的组件(JWT库、第三方服务等)