2

以编程方式创建 Cognito 用户池和应用程序客户端时,如果应用程序客户端对用户池的属性具有读/写访问权限,则必须明确授予该访问权限。我已经能够成功地为自定义属性执行此操作,但内置属性总是返回“创建客户端时指定的写入属性无效”或“创建客户端时指定的读取属性无效”的错误。

文档是......既庞大又难以找到。除了诸如“ReadAttributes 是可以读取的属性的字符串列表”之类的内容之外,我还没有看到这个示例或有关 CreateUserPoolClientRequest 类型的有用文档的实际位。

这是我正在使用的代码,它总是以错误消息结束并且无法创建应用程序客户端。_client 是一个 AmazonCognitoIdentityProviderClient 正确实例化和凭证并在 lambda 函数中运行。

var request = new CreateUserPoolClientRequest { UserPoolId = userPoolId, ClientName = $"{name}AppClient" };

var builtInAttributes = new List<string>()
        {
            "address","birthdate","email","family name","gender","given name","locale","middle name","name","nickname","phone number", "picture","preferred username","profile","zoneinfo","updated at","website"
        };

var readAttributes = new List<string>();
var writeAttributes = new List<string>();

readAttributes.InsertRange(0,builtInAttributes);
writeAttributes.InsertRange(0, builtInAttributes);

var attributeConfig = ConfigurationHelper.GetListFromSection("UserPoolCustomAttributes");

foreach (var attribute in attributeConfig)
{
   readAttributes.Add($"custom:{attribute.Key}");
   writeAttributes.Add($"custom:{attribute.Key}");

}

request.ReadAttributes = readAttributes;
request.WriteAttributes = writeAttributes;

var result = await _client.CreateUserPoolClientAsync(request, CancellationToken.None);

任何帮助是极大的赞赏。

4

1 回答 1

3

弄清楚了。虽然我还没有在任何地方找到它的文档,但是在 api 中使用名称中带有空格的默认属性需要将该空格替换为下划线。

于 2018-12-05T19:17:10.803 回答