首先,我将遵循如何使用FastAPI(https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/)制作安全API的指南。
发生的事情是,您将拥有两个api,其中一个是post并获取
POST是传递
的地方卷曲-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是一个API,要求access_token承载者能够访问API等http://127.0.0.1:8000/getUser
现在,我对运行该应用程序的安全性感到非常困惑,因为令我感到困惑的是,我需要使用用户名和密码向API发出POST请求,这将使我返回access_token,并且我相信使用该access_token稍后我访问下一个api http://127.0.0.1:8000/getUser
吗?这是正确的方法还是我超出范围?
因为让我感到不安全的是,如果我现在说我的用户名和密码“硬编码”到python脚本中,并且有人设法对脚本/ exe /进行全面工程设计(甚至可以通过网络查看以params /形式发送的内容/数据)-在这种情况下,他们将可以访问我的令牌。那么这里的建议是什么?
答案 0 :(得分:1)
这是一个相当广泛的问题。一个很好的起点是OAuth2 RFC 6749。
第一步需要正确理解一些基本知识:
OAuth2.0的前提条件是TLS。假设您将TLS 1.2或1.3与适当的密码套件一起使用,我们可以安全地假设不可能进行网络嗅探
如果您是代表人类用户使用OAuth2.0,则可以使用“授权代码”或“密码凭证”授予类型,以便用户手动输入用户名密码
< / li>如果您是代表客户端本身使用OAuth2.0(不是人类用户),则应使用“客户端凭据”授予类型
所有这些授予类型都有不同的流程。既然您已经提到了硬编码,那么我假设您是指第No点中提到的用例。 3.硬编码秘密绝不是一种选择。解决此问题的最安全方法是将机密存储在保险柜中。一种不太安全的选择是将机密以加密形式存储在单独的文件中。
我也建议您阅读以下答案:
https://stackoverflow.com/a/59433000/1235935
https://stackoverflow.com/a/54011649/1235935