如何通过Python Boto3从Amazon Cognito关联用户池获取当前用户ID
嘿,我来帮你把这个问题理清楚!
用Boto3获取Cognito用户ID的正确姿势
首先先解决你关于Cognito接口选择的疑问:Boto3里的三个Cognito接口分工很明确,你只需要用cognito-idp客户端就够了——它专门负责用户池(User Pool)的用户管理操作,比如查询用户信息、管理用户属性,完全匹配你的需求。另外两个接口cognito-identity是用来处理身份池(联合身份认证场景)的,cognito-sync是老版本的用户数据同步工具,现在基本没人用了,直接忽略就行。
接下来是获取用户ID的具体方法:
你说的get_user()方法确实能拿到用户ID,但它不是直接的顶级字段,而是藏在UserAttributes数组里。Cognito里用户的唯一ID对应的属性名是sub(也就是你在控制台看到的那个User ID值)。
你之前写的代码有个小问题:response['UserAttributes']是一个字典数组,不能直接通过['Value']取值,得遍历数组找到Name为sub的那一项。
方法一:用用户的AccessToken获取(适合用户自主查询)
import boto3 # 初始化cognito-idp客户端 client = boto3.client('cognito-idp') # 调用get_user,传入用户的AccessToken response = client.get_user(AccessToken='your_access_token_string') # 遍历属性数组,找到sub对应的用户ID user_id = next(attr['Value'] for attr in response['UserAttributes'] if attr['Name'] == 'sub') print(user_id) # 输出就是你要的692a...这类字符串
方法二:用管理员权限获取(适合后台管理场景,不需要用户Token)
如果你是管理员,知道用户名和用户池ID,也可以用admin_get_user()方法,这个不需要用户的AccessToken:
import boto3 client = boto3.client('cognito-idp') response = client.admin_get_user( UserPoolId='your_user_pool_id', Username='aws-amplify-admin' ) # 同样找sub属性 user_id = next(attr['Value'] for attr in response['UserAttributes'] if attr['Name'] == 'sub')
最后再划个重点:
- 认准
cognito-idp客户端 - 用户ID对应
UserAttributes里的sub属性,要遍历数组提取 - 根据场景选
get_user()(需要用户Token)或admin_get_user()(管理员权限)
内容的提问来源于stack exchange,提问作者Andreas L.
相关产品推荐
相关产品推荐

