使用FastAPI实现微服务安全

2024-04-26 10:55:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个个人项目,该项目使用Python、FastAPI和微服务体系结构

我想了解更多关于安全性的知识,所以我想在这里添加一些内容。我已经通读了fastapi security intro,这对我来说很有意义

但有一件事我不确定,那就是在微服务体系结构中如何干净地处理这个问题

让我们假设我有两个服务,user服务和bankAccount服务。user服务应该处理与在我的网站上注册的新用户、登录他们等有关的所有事情。在这一点上,对用户进行身份验证应该不会太困难,因为user服务可以访问它的数据库

我不确定前进的最佳方式是使用bankAccount服务。如果用户向该服务中的端点发出请求,我应该如何对其进行身份验证/授权

我可以想到的两个选择如下:

  1. 创建一个/authenticate端点,其唯一目的是让其他服务能够调用它。然后,在bankAccount服务中创建一个包装函数,该函数包装每个端点,并在运行/authenticate端点的函数之前调用该端点
  2. 创建一个/authenticate端点,其唯一目的是让其他服务能够调用它。然后,使用NGINX或某种网关,在将请求发送到bankAccount服务之前调用它

我缺乏这方面的经验/知识,所以我不确定哪一个是更好的选择。我倾向于使用2,这样我就不必将包装器代码从bankAccount服务复制到我创建的任何新服务中,但我对NGINX或其他网关一无所知,因此对于如何最好地在这里进行操作的任何建议都将不胜感激


Tags: 项目函数用户目的身份验证内容网关体系结构
1条回答
网友
1楼 · 发布于 2024-04-26 10:55:35

我不是这方面的专家,因为我最近开始钻研微服务这个话题。所以,对我说的话稍加保留

JWT使用公钥和私钥进行身份验证

您可以做的一件事是在所有的微服务中使用JWT身份验证。基本上,每个服务都能够解密/读取JWT令牌,处理必要的验证并做出相应的响应

身份验证服务将负责生成令牌,因此想法是使用非对称加密,其中身份验证服务拥有的一个密钥用于生成令牌,而其他(公共)密钥用于评估用户提供的令牌的真实性。公钥/私钥也可以是一对公钥/私钥证书

这不是一种可伸缩的方法,因为在密钥更新的情况下,必须更新所有公钥。此外,如果token的内容或要对密钥执行的检查发生更改,则必须相应地更新所有微服务,这可能是一个冗长乏味的过程

不幸的是,我没有任何机会深入探讨,因为主题并不简单,在生产中尝试方法也不是一个好主意

如果有比我更有经验的人可以填写遗漏的细节或其他方法,请随意编辑此答案或在下面发表评论,我将尝试学习并更新我的答案

相关问题 更多 >