我正在从事一个个人项目,该项目使用Python、FastAPI和微服务体系结构
我想了解更多关于安全性的知识,所以我想在这里添加一些内容。我已经通读了fastapi security intro,这对我来说很有意义
但有一件事我不确定,那就是在微服务体系结构中如何干净地处理这个问题
让我们假设我有两个服务,user
服务和bankAccount
服务。user
服务应该处理与在我的网站上注册的新用户、登录他们等有关的所有事情。在这一点上,对用户进行身份验证应该不会太困难,因为user
服务可以访问它的数据库
我不确定前进的最佳方式是使用bankAccount
服务。如果用户向该服务中的端点发出请求,我应该如何对其进行身份验证/授权
我可以想到的两个选择如下:
/authenticate
端点,其唯一目的是让其他服务能够调用它。然后,在bankAccount
服务中创建一个包装函数,该函数包装每个端点,并在运行/authenticate
端点的函数之前调用该端点/authenticate
端点,其唯一目的是让其他服务能够调用它。然后,使用NGINX或某种网关,在将请求发送到bankAccount
服务之前调用它李>我缺乏这方面的经验/知识,所以我不确定哪一个是更好的选择。我倾向于使用2,这样我就不必将包装器代码从bankAccount
服务复制到我创建的任何新服务中,但我对NGINX或其他网关一无所知,因此对于如何最好地在这里进行操作的任何建议都将不胜感激
我不是这方面的专家,因为我最近开始钻研微服务这个话题。所以,对我说的话稍加保留
JWT使用公钥和私钥进行身份验证
您可以做的一件事是在所有的微服务中使用
JWT
身份验证。基本上,每个服务都能够解密/读取JWT
令牌,处理必要的验证并做出相应的响应身份验证服务将负责生成令牌,因此想法是使用非对称加密,其中身份验证服务拥有的一个密钥用于生成令牌,而其他(公共)密钥用于评估用户提供的令牌的真实性。公钥/私钥也可以是一对公钥/私钥证书
这不是一种可伸缩的方法,因为在密钥更新的情况下,必须更新所有公钥。此外,如果
token
的内容或要对密钥执行的检查发生更改,则必须相应地更新所有微服务,这可能是一个冗长乏味的过程不幸的是,我没有任何机会深入探讨,因为主题并不简单,在生产中尝试方法也不是一个好主意
如果有比我更有经验的人可以填写遗漏的细节或其他方法,请随意编辑此答案或在下面发表评论,我将尝试学习并更新我的答案
相关问题 更多 >
编程相关推荐