Spring security 基于my micro service架构的中央JWT管理系统

Spring security 基于my micro service架构的中央JWT管理系统,spring-security,jwt,spring-cloud,netflix-zuul,Spring Security,Jwt,Spring Cloud,Netflix Zuul,我们正在基于微服务的体系结构中构建我们的应用程序,以实现我们的应用程序。与微服务一样,我们现在看到服务之间发生了许多跨服务交互 为了保护端点,我们计划在此类安全交换之间实现基于JWT的身份验证 我们认为有两种方法可以帮助我们实现这一目标: 在每个应用程序中嵌入一个JWT引擎,以生成令牌(@consumer-side)并进行评估(@provider-side)。随着密钥的初始交换,令牌交换将在任何未来通信中顺利进行 拥有一个外部(到应用程序)JWT引擎,它位于分布式应用程序的所有微服务通信之间,负

我们正在基于微服务的体系结构中构建我们的应用程序,以实现我们的应用程序。与微服务一样,我们现在看到服务之间发生了许多跨服务交互

为了保护端点,我们计划在此类安全交换之间实现基于JWT的身份验证

我们认为有两种方法可以帮助我们实现这一目标:

  • 在每个应用程序中嵌入一个JWT引擎,以生成令牌(@consumer-side)并进行评估(@provider-side)。随着密钥的初始交换,令牌交换将在任何未来通信中顺利进行
  • 拥有一个外部(到应用程序)JWT引擎,它位于分布式应用程序的所有微服务通信之间,负责所有令牌生命周期,包括其加密、解密和验证
  • 根据上所列的选项#1,有很多选项可供选择,但考虑到头上令牌生成和管理增加了一项微型服务,我们更倾向于使用第二个选项,即非集中式网关

    经过相当多的研究和对各种API网关的研究,我们还没有找到一种轻量级的解决方案/工具来满足我们的需要,并帮助我们获得由许多微服务组成的一个应用程序的集中引擎

    有人知道这样的工具/解决方案吗


    如果您对这种方法有任何其他意见,请告诉我。

    这两种方案都可以在SpringCloudZuul中实现

    有关更多信息:

    我也更喜欢选项2,但您为什么要寻找框架

    中央应用程序应该只负责管理私钥和颁发令牌。包括一个解决一个服务的框架可能是过分的

    您也可以考虑实现验证服务,但由于应用程序是您的,因此我建议使用非对称密钥并在本地验证令牌,而不是对中心应用程序执行远程验证请求。您可以为您的微服务提供一个简单的库来下载密钥并执行验证。嵌入JWT.io的任何库或从头开始构建它。验证JWT非常简单


    如果您需要在到期之前拒绝令牌(例如使用黑名单),则需要一个中心服务。但我不推荐这种方案,因为它打破了JWT的无状态

    我在搜索中探索了Zuul,不确定Zuul是否真的能够为通过它连接的应用程序生成/管理和验证JWT令牌。Zuul文档中也没有提到提供JWT支持的证据。虽然它有一个令牌中继系统,但这不是JWT令牌。事实上,通过Zuul的每个微服务都使用相同的clientId(如ZuulProxy设置中指定的)。然而,我们希望为每个连接“交换”唯一的令牌,用于内部微服务调用。此外,我不希望我的端点解密和验证令牌。收到令牌后,应将该部件卸载回JWT发动机。如果您有一个使用Zuul满足这一需求的示例/示例,您介意分享吗?喜欢您的建议@pedrofb。