You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:32:34