python - 如何验证从 Cognito CustomUI 登录页面返回的 AWS Cognito session 代码

标签 python amazon-web-services amazon-cognito

我将 Cognito 配置为使用 AWS Cognito 提供的自定义网站进行注册/登录,如此处指定:

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-ui-customization.html

我完全能够在 AWS Cognito 页面中注册和登录:

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>

问题是,成功登录后,Cognito 重定向到我设置的重定向页面,并且重定向包含一个“代码”值作为 GET 参数。

我找不到关于如何使用该“代码”参数的文档,但它肯定需要由我的 Python 后端进行验证,以检查该代码是否是给定用户的有效 session 。

您能否提供示例 Python 代码(使用或不使用库,也许是 Warrant)和 JavaScript 代码来验证该“代码”参数?以及获取该“代码”参数的用户的电子邮件/姓名?

谢谢!!

最佳答案

由于您使用的是授权代码授予流程,因此需要执行以下操作才能获得短暂的 id_token、长期的 refresh_token 和 access_token。

注意:这是最难实现的流程。如果您需要简化身份验证流程,请使用隐式授权流程,一旦用户使用登录页面登录,该流程将返回 id_token。

对于授权码流程,它需要以下内容

  1. 从登录重定向 URL 接收授权代码。该代码不可重复使用,仅需用于获取访问 token 。
  2. 可以使用 AWS Cognito 提供的 token 端点将此代码交换为访问 token 。您需要发送以下格式的 HTTP POST 请求(无 PKCE)。

    获取 https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize ? 响应类型=代码& client_id=ad398u21ijw3s9w3939& redirect_uri= https://YOUR_APP/redirect_uri& 状态=状态& scope=openid+profile+aws.cognito.signin.user.admin

    有关更多详细信息,请阅读 Token Endpoint文档。

  3. 收到 token 后,将 refresh_token 存储在安全的地方以获取新的 id_token 并使用 id_token 访问 API。

关于python - 如何验证从 Cognito CustomUI 登录页面返回的 AWS Cognito session 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575860/

相关文章:

python - OpenGL正确的矩阵变换顺序以在定点旋转对象

python - 在django和python中上传文件?

python - 在python中,我想要数千个单独的十进制数并精确显示2个十进制数字

python - 如何在停机时间最短的情况下将 DynamoDB 表迁移到全局 DynamoDB 表?

c# - 在 ALB 上使用 Cognito 用户池进行 ASP.NET Core 身份验证

python - 在没有列表突变的情况下通过 argmin() 或 min() 在 python/numpy 中查找前三个值的索引?

amazon-web-services - RDS - SQL 服务器代理

php - Gmail SMTP 在 ec2 实例中不工作

amazon-web-services - AWS Cognito 自定义身份验证 - 将元数据发送到挑战 lambda 函数

amazon-web-services - AWS Elastic Beanstalk : Error matching signature