我将 Cognito 配置为使用 AWS Cognito 提供的自定义网站进行注册/登录,如此处指定:
我完全能够在 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。
对于授权码流程,它需要以下内容
- 从登录重定向 URL 接收授权代码。该代码不可重复使用,仅需用于获取访问 token 。
可以使用 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文档。
收到 token 后,将 refresh_token 存储在安全的地方以获取新的 id_token 并使用 id_token 访问 API。
关于python - 如何验证从 Cognito CustomUI 登录页面返回的 AWS Cognito session 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47575860/