检索Cognito用户的IdentityId

时间:2017-10-20 09:39:05

标签: .net amazon-web-services authentication amazon-s3 amazon-cognito

首先,我已经阅读了类似的问题:

我们使用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}会是什么样子。

1 个答案:

答案 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"

希望它能提供帮助! ......他们的文档对特定用例没有太大帮助,所以我们必须坚持下去!