7

我有一个带有注册/登录选项的移动应用程序。移动应用程序调用 Rest API,API 使用 Python boto3 CognitoIdentityProvider客户端在 AWS Cognito 用户池中创建用户。使用电子邮件/密码登录可以正常工作。

对于社交登录,移动应用程序使用 google 登录和获取 idToken、accessToken 进行更新。如何使用谷歌返回的登录令牌从后端 python 环境在 Cognito 用户池中登录/创建用户?这可行吗?

对于用户名/密码选项,我使用注册admin_initiate_auth方法。但不确定在使用 google/facebook 登录选项时使用什么来允许用户在 UserPool 中签名或创建用户。

本质上,Boto3 或其他 AWS 库中有一种方法可以使用 google/facebook 返回的 idToken> 在 UserPool 中创建用户

4

1 回答 1

5

boto3 CongnitoIdentity 服务的 get_id方法解决了这个问题。

使用 google 返回的 ID 令牌,调用 get_id 来创建联合身份。

    client = boto3.client('cognito-identity',
                        aws_access_key_id=ACCESS_KEY,
                        aws_secret_access_key=ACCESS_SECRET_KEY)
    response = client.get_id(
        AccountId='YOUR AWS ACCOUNT ID',
        IdentityPoolId='us-east-1:xxxdexxx-xxdx-xxxx-ac13-xxxxf645dxxx',
        Logins={
            'accounts.google.com': 'google returned IdToken'
        },
    )

响应包括 Cognito IdentityId:

{
"ResponseMetadata": {
  "RetryAttempts": 0,
  "HTTPStatusCode": 200,
  "RequestId": "xxxfb049b-1f77-xxxx-a67c-xxxfb049b",
  "HTTPHeaders": {
    "date": "Sun, 04 Mar 2018 06:43:13 GMT",
    "x-amzn-requestid": "xxxfb049b-1f77-xxx-a67c-xxxfb049b",
    "content-length": "63",
    "content-type": "application/x-amz-json-1.1",
    "connection": "keep-alive"
  }
},
"IdentityId": "us-east-1:xxx-2xx1-1234-9xx2-xxxx"
}
于 2018-03-04T06:52:41.033 回答