对多个服务进行FastAPI认证,不需要管理API网关



我有一个关于基于FastAPI的微服务新项目的一般架构问题。现在看看它,它真的不是特定于FastAPI的,但它是这样的:

如何使基于JWT的身份验证在多个服务之间工作?

  1. 您不能使用来自AWS等的托管服务,如API网关(安全要求)
  2. 有一个用户管理服务,它包含用户名,密码等,理想情况下它将允许JWT身份验证
  3. 有其他的微服务包含应用逻辑的用户存储在第一个微服务(从2.)

在单体应用中这很容易,在带有API网关的微服务架构中也很容易,但是:

如果事情取决于用户管理微服务来保存相关的用户数据(实际上是它自己的网关),而其他服务应该为这些用户执行操作(基于JWT令牌),那么你将如何处理这个(高层)

tl;dr如何将身份验证扩展到持有应用程序逻辑的其他微服务?我想我想得太多了,可能引入了太多的耦合:)

如果您的身份验证/用户管理服务发出JWT,那么您的其他服务可以依赖它只提供允许的数据。

发出的令牌应该包含所有相关的安全信息。假设您有三种类型的用户:admin、manager、employee。为简单起见,假设这是唯一的安全标准(您可能有多个标准)。

令牌可以有一个表示用户权限的字段。根据OAuth2规范,这通常在scope字段中完成。你可以为它创建自己的自定义字段。

有了这个令牌,你就可以使用它来调用你的后端服务。服务将:
  • 首先检查令牌的完整性和有效性
  • 检查令牌有效载荷的范围/权限,并根据它提供数据

参见FastAPI官方教程,通过简单的依赖注入来使用作用域。


回复您的评论:

JWT只属于Traefik Enterprise

也许您正在谈论在Traefik中直接处理JWT,但是您应该可以轻松地传递授权报头并在后端服务中处理授权检查。另外,你可以在请求正文中嵌入令牌,完全绕过反向代理。

最新更新