使用Cognito UserPools进行社交登录的Boto3

sum*_*n j 5 amazon-web-services boto3 google-signin amazon-cognito-facebook aws-cognito

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

对于社交登录,移动应用会使用Google登录和提取idToken,accessToken进行更新.如何使用google返回的signIn令牌从后端python环境在Cognito用户池中登录/创建用户?这可行吗?

对于用户名/密码选项,我使用signupadmin_initiate_auth方法.但是在使用google/facebook登录选项时,不确定允许用户在UserPool中签名或创建用户的内容.

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

sum*_*n j 5

来自boto3的get_id方法CongnitoIdentity服务解决了这个问题.

使用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'
        },
    )
Run Code Online (Sandbox Code Playgroud)

响应包括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"
}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这个答案被接受并获得投票...问题是关于使用用户池对用户进行身份验证,而答案是关于使用身份池对用户进行身份验证..我错过了什么吗? (3认同)
  • 在我看来,AWS 选择的这些名称非常令人困惑。简而言之,用户池就是拥有用户列表并管理注册、登录、丢失密码等正常登录的内容。身份池是授予使用 AWS 服务的权限的层。用户池有一个 ID 池,在某种意义上“位于其之上”。现在,obv federated 管理自己的用户,AWS 将其链接到 ID 池以授予服务权限。但真正令人困惑的是,您可以将用户池与联邦登录关联起来,它将在用户池中创建一个无密码用户来代表它们......我认为......! (2认同)