如何验证从 Cognito CustomUI 登录页面返回的 AWS Cognito 会话代码

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

我将 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 会重定向到我设置的重定向页面,并且重定向包含一个“code”值作为 GET 参数。

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

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

谢谢!!

python amazon-web-services amazon-cognito
3个回答
2
投票

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

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

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

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

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

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

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


1
投票

返回的代码采用 jwt 令牌的格式。我不清楚这个令牌的格式到底是什么

我没有任何示例 python 代码(但是,这是当前的兴趣/项目),但这里有 Javascript 代码https://github.com/aws/chalice/issues/563


0
投票

您可以使用代码值获取令牌。为了实现这一点,你已经点击了 Cognito 提供的 token api 端点。请参阅以下网址https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html

找到下面的示例请求标头的内容类型应该与此处使用的相同。 该授权 hashsecret 必须使用 clientid 和 clientsecret 生成。

req=requests.post('https://<paste domain here>.auth.<region>.amazoncognito.com/oauth2/token',headers={'Content-Type':'application/x-www-form-urlencoded','Authorization':'Basic <secret hash here>'},data={                                
                            'grant_type'='authorization_code',
                            'client_id':'<client id here>',
                            'code':'<code here>',
                            'redirect_uri':'<redirect uri here>'}
© www.soinside.com 2019 - 2024. All rights reserved.