[首先,我已遵循如何使用FastAPI(https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/)制作安全API的指南。
发生的情况是,您将有两个api,其中一个是post and get
[POST是您通过的位置
curl -X POST“ http://127.0.0.1:8000/token” -H“接受:application / json” -H“内容类型:application / x-www-form-urlencoded” -d“ grant_type =&username = hello&password = world&scope =&client_id = &client_secret =“
GET是一个需要access_token载体才能访问API的api,等等http://127.0.0.1:8000/getUser
现在,我对运行该应用程序的安全性感到非常困惑,因为让我感到困惑的是,我需要使用我的用户名和密码向API发出POST请求,这将使我返回access_token,并且我相信使用该access_token稍后访问下一个api是http://127.0.0.1:8000/getUser
?这是正确的方法还是我超出范围?
因为让我感到不安全的是,如果我现在说我的用户名和密码“硬编码”到python脚本中,并且有人设法对脚本/ exe /任何东西进行重新设计(甚至可以通过网络查看作为参数/数据发送的内容) )-在这种情况下,他们将可以访问我的令牌。那么这里的建议是什么?
这是一个非常广泛的问题。一个好的起点可能是OAuth2 RFC 6749。
第一步需要正确理解的一些基本知识是:
OAuth2.0的前提是TLS。假设您将TLS 1.2或1.3与适当的密码套件一起使用,我们可以安全地假设不可能进行网络嗅探]]
如果您是代表人类用户使用OAuth2.0,则可以使用“授权代码”或“密码凭证”授予类型,用户可以在其中手动输入用户名密码。
如果您代表客户端本身(不是人类用户)使用OAuth2.0,则应使用“客户端凭据”授予类型
所有这些赠款类型都有不同的流程。既然您已经提到了硬编码,那么我假设您是指第点中提到的用例。 3.硬编码秘密绝不是一种选择。解决此问题的最安全方法是将机密存储在保险柜中。一种不太安全的选择是将机密以加密形式存储在单独的文件中。
我也建议您阅读以下答案:
https://stackoverflow.com/a/54011649/1235935