首先,我已经阅读了类似的问题:
我们使用Cognito Users并通过Bucket Policy为他们提供对存储桶中文件夹的访问权限 - 例如BUCKET_NAME / user_data / eu-west-2:00000000-0000-0000-0000-000000000000。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::BUCKET_NAME",
"Condition": {
"StringLike": {
"s3:prefix": [
"user_data/${cognito-identity.amazonaws.com:sub}/",
]
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": [
"arn:aws:s3:::BUCKET_NAME/user_data/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
这适用于使用javascript API的客户。他们进行身份验证,我可以使用 AWS.config.credentials.identityId 1 访问S3。
但是,如果我想从我的.Net Web API后端访问用户的存储桶,我找不到获取IdentityId的方法。所以我不知道哪个文件夹是用户的,这使得能够创建用户文件夹的目的失败了。例如,当用户注册时,我可能想要创建具有现有项目的文件夹......
一个解决方法是让客户端发布IdentityId,以便可以针对User子存储它,但是假设 - 1.it发生; 2.该ID有效。
TLDR:如何使用Cognito用户名(子)中的AWSSDK.CognitoIdentity获取Cognito IdentityId?
1 重要的一点 - 正如我在太多时间后发现的那样,$ {cognito-identity.amazonaws.com:sub} 不是用户子。文档非常不清楚,所以我不知道$ {cognito-identity.amazonaws.com:sub}会是什么样子。
答案 0 :(得分:0)
这实际上可以帮助你做一个良好的开端:
Amazon.CognitoIdentity.CognitoAWSCredentials creds =
new Amazon.CognitoIdentity.CognitoAWSCredentials("pool id", Amazon.RegionEndpoint.USEast1, ...);
creds.GetIdentityId();
这里有一条线索:http://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html 在Unity部分。
nuget:package id =" AWSSDK.CognitoIdentity"版本=" 3.3.2.16"
希望它能提供帮助! ......他们的文档对特定用例没有太大帮助,所以我们必须坚持下去!