微服务架构中的认证授权设计

时间:2021-03-06 07:26:10

标签: spring-security microservices api-gateway

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

所以我计划使用 3 个服务来实现这一目标。

  1. API 网关
  2. 用户服务
  3. 订单服务

第一步: 客户端将用户名和密码发送到 API 网关 以获取令牌。 API 网关 应调用用户服务来验证凭据,如果凭据有效 API 网关 会创建一个令牌并将其发送给客户端。

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

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

我相信这将是实现微服务架构安全的更好方法之一。

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为您走在正确的道路上。但是每个操作都依赖于 User Service,这使得 User Service 成为可能的单点故障,其他服务的可用性将取决于 User Service。

请阅读有关 Service Fuse 反模式的更多信息:https://akfpartners.com/growth-blog/microservice-anti-pattern-service-fuse

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

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