在AWS Lambda中能否通过Username查询AWS Cognito用户?
问题解答
你的理解没有错误,GetUserCommand确实不支持Username作为入参:
GetUserCommand的设计定位是供已登录的终端用户查询自身的账户信息,仅接受AccessToken作为唯一必填入参,入参结构中自然不会包含Username字段,无法满足你通过用户名检索指定用户的需求。
如果你需要在AWS Lambda(服务端可信场景)中通过Username查询Cognito用户池中的用户信息,可使用AdminGetUserCommand接口,使用说明如下:
- 该接口属于Cognito服务端管理类接口,必填入参为
UserPoolId(目标Cognito用户池ID)和Username(待查询的用户名) - 你需要先为Lambda的执行角色配置
cognito-idp:AdminGetUser操作权限,关联对应用户池资源,否则会触发权限报错
代码示例(AWS JS SDK v3)
import { CognitoIdentityProviderClient, AdminGetUserCommand } from "@aws-sdk/client-cognito-identity-provider"; // 初始化Cognito客户端,区域替换为你的用户池所属AWS区域 const cognitoClient = new CognitoIdentityProviderClient({ region: "cn-north-1" }); async function queryCognitoUserByUsername(username) { const command = new AdminGetUserCommand({ UserPoolId: "你的用户池ID,格式类似cn-north-1_XXXXXX", Username: username }); try { const userInfo = await cognitoClient.send(command); // userInfo中包含用户的所有属性、账户状态、注册时间等完整信息 return userInfo; } catch (error) { console.error("用户查询失败:", error); throw error; } }
如果需要同时匹配用户名以外的其他属性、或者批量查询用户,可以使用ListUsersCommand接口,通过Filter参数设置过滤条件实现。
内容的提问来源于stack exchange,提问作者crayden
相关产品推荐
相关产品推荐

