微服务架构中的认证授权设计
Posted
技术标签:
【中文标题】微服务架构中的认证授权设计【英文标题】:Authentication and Authorization Design in Microservice Architecture 【发布时间】:2021-06-04 18:33:25 【问题描述】:我正在使用微服务架构开发应用程序。需要实施安全性。
所以我计划使用 3 项服务来实现这一目标。
-
API 网关
用户服务
订单服务
第一步: 客户端将用户名和密码发送到 API Gateway 以获取令牌。 API 网关 应该调用用户服务来验证凭据,如果凭据有效API 网关 创建一个令牌并将其发送给客户端。
第二步: 客户端尝试使用令牌(API Gateway 在步骤 1 中发送)访问订单服务,因此 API Gateway 必须调用用户服务来验证令牌。
我正在考虑在我的 API 网关 微服务中包含所有授权和身份验证逻辑。因此,当我从 API Gateway 的消费者那里获得 JWT 令牌时,我应该调用 Users Service 来根据用户名和密码验证它,因为我将所有与用户相关的数据存储在用户服务。
我相信这将是实现微服务架构安全性的更好方法之一。
如果有更优雅的方式,请提出建议。
提前致谢。
【问题讨论】:
您能否澄清一下“当我从 API 网关的消费者那里获得 JWT 令牌时,我应该调用用户服务以根据用户名和密码对其进行验证”是什么意思?您不会同时获得 JWT 和用户名/密码,对吧? @DenizAcay,我编辑了问题,如果您有任何疑问,请让我继续。 【参考方案1】:我认为你走在正确的道路上。但是每个操作都依赖于用户服务,这使得用户服务成为可能的单点故障,其他服务的可用性将取决于用户服务。
请阅读有关 Service Fuse 反模式的更多信息:https://akfpartners.com/growth-blog/microservice-anti-pattern-service-fuse
对于第一次身份验证调用,将用户名和密码的身份验证委托给用户服务是有意义的。但对于其他调用,您只需在 API 网关上验证 JWT。
我建议使用公钥加密来签署 JWT,这样您就可以在用户服务上使用私钥对 JWT 进行签名,并将公钥部署到 API Gateway 进行验证。这样,API Gateway 或任何其他服务将能够验证令牌,而无需敏感的共享密钥。
【讨论】:
在这种情况下 1. Users Service 是身份验证服务器权限(Kind Of),2. 我们可以在 Order Service 中具有方法级别的安全性吗? 是的,但是由于客户端需要与API Gateway 通信才能访问Order Service,您也可以在API Gateway 中验证JWT 令牌,然后才能访问Order Service。以上是关于微服务架构中的认证授权设计的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享#权限设计系列「认证授权专题」微服务架构的登陆认证问题