我正在使用微服务架构开发应用程序。需要实施安全性。
所以我计划使用 3 个服务来实现这一目标。
第一步: 客户端将用户名和密码发送到 API 网关 以获取令牌。 API 网关 应调用用户服务来验证凭据,如果凭据有效 API 网关 会创建一个令牌并将其发送给客户端。
步骤 2: 客户端尝试使用令牌(API 网关 在 Step1 中发送的)访问订单服务,因此 API 网关 必须调用用户服务来验证令牌。
我想在我的 API 网关 微服务中包含所有授权和身份验证逻辑。因此,当我从 API 网关 的消费者那里获得 JWT 令牌时,我应该调用 用户服务 以根据用户名和密码对其进行验证,因为我将所有用户相关数据存储在用户服务。
我相信这将是实现微服务架构安全的更好方法之一。
请建议是否有更优雅的方式。
提前致谢。
答案 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 或任何其他服务将能够验证令牌,而无需敏感的共享秘密。