获取access_token时Oauth2(承载者令牌)如何工作

问题描述 投票:0回答:1

[首先,我已遵循如何使用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 /任何东西进行重新设计(甚至可以通过网络查看作为参数/数据发送的内容) )-在这种情况下,他们将可以访问我的令牌。那么这里的建议是什么?

security oauth-2.0 bearer-token
1个回答
0
投票

这是一个非常广泛的问题。一个好的起点可能是OAuth2 RFC 6749。

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

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

  2. 如果您是代表人类用户使用OAuth2.0,则可以使用“授权代码”或“密码凭证”授予类型,用户可以在其中手动输入用户名密码。

  3. 如果您代表客户端本身(不是人类用户)使用OAuth2.0,则应使用“客户端凭据”授予类型

  4. 所有这些赠款类型都有不同的流程。既然您已经提到了硬编码,那么我假设您是指第点中提到的用例。 3.硬编码秘密绝不是一种选择。解决此问题的最安全方法是将机密存储在保险柜中。一种不太安全的选择是将机密以加密形式存储在单独的文件中。

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

    https://stackoverflow.com/a/59433000/1235935

https://stackoverflow.com/a/54011649/1235935

https://stackoverflow.com/a/54258744/1235935

https://stackoverflow.com/a/59464645/1235935

© www.soinside.com 2019 - 2024. All rights reserved.