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

时间:2017-11-30 14:30:54

标签: python amazon-web-services amazon-cognito aws-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后端验证,以检查该代码是否是给定用户的有效会话。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

返回的代码采用jwt标记的格式。我不清楚这个令牌的格式究竟是什么

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

答案 1 :(得分:1)

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

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

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

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

    GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? RESPONSE_TYPE =代码&安培; CLIENT_ID = ad398u21ijw3s9w3939&安培; REDIRECT_URI = https://YOUR_APP/redirect_uri& 状态= STATE&安培; 范围= +的OpenID轮廓+ aws.cognito.signin.user.admin

    有关详细信息,请参阅Token Endpoint文档。

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