获取 access_token 时 Oauth2(不记名令牌)如何工作

How does Oauth2 (Bearer token) work when getting access_token

我首先要说的是,我已经遵循了如何使用 FastAPI (https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/) 制作安全 API 的指南。

发生的情况是您将有两个 api,其中一个是 post 和 get

现在我对 运行 应用程序的安全性感到非常困惑,因为让我感到困惑的是我需要使用我的用户名和密码向 [=] 发出 POST 请求45=] 这将 return 我 access_token 我相信 access_token 我稍后会访问下一个 api 即 http://127.0.0.1:8000/getUser?这是正确的方法还是我超出了范围?

因为让我不安全的是,如果我现在让 "hardcode" 我的用户名和密码进入 python 脚本并且有人设法对 script/exe/whatever 进行逆向工程(也许甚至看到通过网络发送的内容为 params/data)- 在这种情况下,他们将能够访问我的令牌。那么这里的建议是什么?

这是一个相当宽泛的问题。一个好的起点可能是 OAuth2 RFC 6749。

第一步需要正确理解的一些基础知识是:

  1. OAuth2.0的前提是TLS。假设您使用的是具有适当密码套件的 TLS 1.2 或 1.3,我们可以安全地假设网络嗅探是不可能的

  2. 如果您代表人类用户使用 OAuth2.0,您将使用 "Authorization Code" 或 "Password Credentials" 授权类型,用户将在其中输入用户名密码手动

  3. 如果您代表客户端本身(不是人类用户)使用 OAuth2.0,您将使用 "Client Credentials" 授权类型

所有这些资助类型都有不同的流程。由于您提到了硬编码,我假设您指的是第 1 点中提到的用例。 3. 硬编码秘密绝不是一种选择。处理这个问题最安全的方法是将秘密存储在保险库中。安全性较低的选项是以加密形式将秘密存储在单独的文件中。

我也建议您阅读以下答案: