我有一个关于基于FastAPI的微服务新项目的一般架构问题。现在来看,它实际上不是特定于FastAPI的,但是它在这里:
假设以下情况,如何使基于JWT的身份验证在多个服务之间工作:
在整体应用程序中,这很容易;在具有API网关的微服务架构中,这也很容易,但是:
如果事情取决于用户管理微服务来保存相关用户数据(实际上是其自身的网关),而其他服务应该为那些用户执行操作(基于JWT),您将如何处理(高级)令牌)
tl; dr您如何将身份验证扩展到其他具有应用程序逻辑的微服务?我想我对此太过思索,并可能引入过多的耦合:)
如果您的身份验证/用户管理服务发出JWT,则其他服务可以依靠它来仅提供允许的数据。
发行的令牌应包含所有相关的安全信息。假设您有三种类型的用户:admin,manager,employee。为了简单起见,假设这是唯一的安全性标准(您可能有多个标准)。
令牌可以具有指示用户权限的字段。根据OAuth2规范,此操作通常在scope
字段中完成。无论如何,您都可以为其创建自定义字段。
有了令牌,您就可以使用它调用后端服务。然后,服务将:
另请参阅官方FastAPI教程,有关通过简单的依赖注入为此目的使用范围。
回答您的评论:
可悲的是,JWT仅在Traefik Enterprise中
也许您是在谈论直接在Traefik中处理JWT,但您应该毫不费力地传递授权标头并处理后端服务中的授权检查。另外,您始终可以将令牌嵌入请求正文中,并完全绕过反向代理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句