如何使用 python 以编程方式交换授权代码以从 cognito 获取访问令牌

umd*_*dev 1 api oauth-2.0 python-3.x amazon-cognito

我一直在寻找有关如何交换authorization_code以实用地从cognito获取访问令牌的解决方案。我创建了认知池和集成应用程序客户端。因此,当我以以下格式调用登录域时,我会获取登录页面并能够登录/注册

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>
Run Code Online (Sandbox Code Playgroud)

现在上面的url将返回authorization_code作为参数。我使用 post man 通过以下查询获取结果,该查询返回 id 令牌、访问令牌、刷新令牌。

POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'
grant_type=authorization_code&
client_id=myid&
code=AUTHORIZATION_CODE&
redirect_uri=http://localhost:5000/login
Run Code Online (Sandbox Code Playgroud)

现在我需要在我的应用程序中实现相同的方法来获取访问令牌下面是我尝试过的代码

 response = requests.post(url + '/oauth2/token',
                             auth=(App_client_id),
                             data={'grant_type': grant_type, 'code': accessCode, 'client_id': App_client_id,
                                   "redirect_uri":'http://localhost:5000/login'})
print(response.json())
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何回应。

预期:我正在寻找如何实现以下用例

  1. 我有一个与 cognito 用户池/授权者关联的 api-gateway,并且该 api-gateway 从其他 aws 服务(例如 lambda)返回响应。

2.在我的应用程序 - Flask 应用程序中,我想以这样的方式放置一个逻辑:一旦用户在登录后通过用户池进行身份验证,它就会在redirect_uri中返回authorization_code。

  1. 在redirect_uri中,我有某些操作-读/写/删除任务。对于每项任务,我需要使用通过授权代码交换收到的访问令牌进行身份验证。因此只有登录的用户才能从重定向 uri 执行操作。

感谢有人可以帮助解决这个问题吗?

谢谢

Luc*_*orr 6

对于其他坚持让这个工作的人来说,我发现它可以使用params中的参数requests.post

token_url="https://myapp.auth.us-east-1.amazoncognito.com/oauth2/token"
message = bytes(f"{client_id}:{client_secret}",'utf-8')
secret_hash = base64.b64encode(message).decode()
payload = {
    "grant_type": 'authorization_code',
    "client_id": client_id,
    "code": code,
    "redirect_uri": redirect_uri
}
headers = {"Content-Type": "application/x-www-form-urlencoded",
            "Authorization": f"Basic {secret_hash}"}
           
resp = requests.post(token_url, params=payload, headers=headers)
Run Code Online (Sandbox Code Playgroud)