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

使用Amazon.AspNetCore.Identity.Cognito时GetUsersInRoleAsync仅返回25条结果的问题

问题分析与解决办法

限制原因

你遇到的25条结果限制,根源是AWS Cognito的ListUsersInGroup API默认设置:该API默认单页最多返回25条用户数据,而Amazon.AspNetCore.Identity.Cognito包中的GetUsersInRoleAsync方法内部直接调用了这个API,且没有实现自动分页逻辑,所以只会返回第一页的25条结果,不会自动获取后续数据。

解决办法

无法直接取消这个限制,但可以通过手动处理分页的方式,调用Cognito原生API获取全部用户:

  1. 注入AmazonCognitoIdentityProviderClient(需提前配置好AWS凭证和区域)
  2. 编写自定义方法,循环请求API直到获取所有用户(利用返回的NextToken判断是否还有下一页)

示例代码如下:

// 假设已注入AmazonCognitoIdentityProviderClient实例
private readonly AmazonCognitoIdentityProviderClient _cognitoClient;
private readonly string _userPoolId = "你的Cognito用户池ID";

public async Task<List<CognitoUser>> GetAllUsersInGroupAsync(string groupName)
{
    var allUsers = new List<CognitoUser>();
    string nextToken = null;

    do
    {
        var request = new ListUsersInGroupRequest
        {
            GroupName = groupName,
            UserPoolId = _userPoolId,
            MaxResults = 60, // Cognito允许的单页最大结果数为60
            NextToken = nextToken
        };

        var response = await _cognitoClient.ListUsersInGroupAsync(request);
        // 将Cognito返回的用户数据转换为CognitoUser对象
        allUsers.AddRange(response.Users.Select(user => 
            new CognitoUser(
                user.Username,
                user.Attributes.First(a => a.Name == "email").Value,
                null, null, null
            )));
        
        nextToken = response.NextToken;
    } while (!string.IsNullOrEmpty(nextToken));

    return allUsers;
}

注意事项

  • 替换代码中的_userPoolId为你实际的Cognito用户池ID
  • 根据你的用户属性配置调整CognitoUser的构造参数(比如如果用户没有邮箱属性,需换其他必填属性)
  • MaxResults可设置为1到60之间的数值,设为60能减少请求次数

内容的提问来源于stack exchange,提问作者Tom B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:31:15