Spring security 微服务体系结构中的认证与授权设计

Spring security 微服务体系结构中的认证与授权设计,spring-security,microservices,api-gateway,Spring Security,Microservices,Api Gateway,我正在使用微服务架构开发应用程序。需要实现安全性 因此,我计划使用3种服务来实现这一目标 API网关 用户服务 订单服务 步骤1: 客户端将用户名和密码发送到API网关以获取令牌API网关应调用用户服务来验证Cred,如果Cred有效API网关将创建令牌并将其发送给客户端 第二步: 客户端尝试使用令牌(在步骤1中发送的API网关)访问订单服务,因此API网关必须调用用户服务来验证令牌 我想在我的API网关微服务中包含所有授权和身份验证逻辑。因此,当我在API Gateway从消费者处获得JWT令

我正在使用微服务架构开发应用程序。需要实现安全性

因此,我计划使用3种服务来实现这一目标

  • API网关
  • 用户服务
  • 订单服务
  • 步骤1: 客户端将用户名和密码发送到API网关以获取令牌API网关应调用用户服务来验证Cred,如果Cred有效API网关将创建令牌并将其发送给客户端

    第二步: 客户端尝试使用令牌(在步骤1中发送的API网关)访问订单服务,因此API网关必须调用用户服务来验证令牌

    我想在我的API网关微服务中包含所有授权和身份验证逻辑。因此,当我在API Gateway从消费者处获得JWT令牌时,我应该调用Users Service以根据用户名和密码对其进行验证,因为我在Users Service中存储了所有与用户相关的数据

    我相信这将是实现微服务体系结构安全性的更好方法之一

    请建议是否有更优雅的方式


    提前谢谢。

    我认为你走的路是对的。但是,依赖于每个操作的用户服务会使用户服务成为可能的单点故障,其他服务的可用性将取决于用户服务

    请阅读有关维修保险丝反模式的更多信息:

    对于第一个身份验证调用,使用用户名和密码将身份验证委托给用户服务是有意义的。但是对于其他调用,您可以在API网关上验证JWT


    我建议使用公钥密码对JWT进行签名,这样您就可以在用户服务上使用私钥对JWT进行签名,并将公钥部署到API网关进行验证。通过这种方式,API网关或任何其他服务将能够验证令牌,而不需要敏感的共享机密。

    请您澄清“当我从API网关的消费者处获得JWT令牌时,我应该调用用户服务根据用户名和密码对其进行验证”是什么意思?你不会同时获得JWT和用户名/密码,对吗?@DenizAcay,我编辑了这个问题,如果你有任何疑问,请让我继续提问。在这种情况下,1。用户服务是认证服务器的权利(种类),和2。我们可以在订单服务中使用方法级别的安全性,对吗?是的,但由于客户端需要与API网关通信以访问订单服务,因此您还可以在允许访问订单服务之前验证API网关中的JWT令牌。