我将 Cognito 配置为使用 AWS Cognito 提供的自定义网站进行注册/登录,如下所示:
我完全能够在 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代码?并获取该“代码”参数的用户的电子邮件/姓名?
谢谢!!
由于您使用的是授权代码授予流程,因此需要执行以下操作才能获取短期 id_token、长期刷新_token 和 access_token。
注意:这是最难实现的流程。如果您需要简化的身份验证流程,请使用隐式授权流程,一旦用户使用登录页面登录,该流程将返回 id_token。
对于授权码流程,需要以下
可以使用 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文档。
收到令牌后,将refresh_token存储在安全的地方以获取新的id_token并使用id_token访问API。
返回的代码采用 jwt 令牌的格式。我不清楚这个令牌的格式到底是什么
我没有任何示例 python 代码(但是,这是当前的兴趣/项目),但这里有 Javascript 代码https://github.com/aws/chalice/issues/563
您可以使用代码值获取令牌。为了实现这一点,你已经点击了 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>'}