.net AWS正在获取经过身份验证的身份池凭据

1dkrff03  于 2022-12-20  发布在  .NET
关注(0)|答案(1)|浏览(307)

我有一个Web应用程序,Cognito用户将在其中登录,然后需要访问S3和DynamoDB资源。我有一个配置了授权和未授权角色的身份池,但我只需要使用已授权角色,因为我不希望访客用户能够注册或使用该应用程序。
以Cognito用户身份登录后,我将创建CognitoAWSCredentials,以便访问所需的资源:

CognitoAWSCredentials identityPoolCreds = new CognitoAWSCredentials(accountID, identityPoolID, unauthRole, authRole, EUWest);

只要我将S3FullAccess授予unauthRole,它就可以工作,但当我仅将其授予authRole时,它会抛出“拒绝访问”。当我阻止从AWS控制台内访问unauthRole时,它会抛出“此身份池不支持未经身份验证的访问”错误。因此,它看起来好像总是尝试使用未经验证的角色。如何让它使用经过验证的角色?我已经在此过程的早期登录了一个用户,但我没有将该用户的任何数据传递给CognitoAWSCredentials,这可能是问题所在?

x4shl7ld

x4shl7ld1#

我通过向凭据添加登录名解决了此问题:

CognitoAWSCredentials creds = new CognitoAWSCredentials(identityPoolID, region);

        string providerName = $"cognito-idp.{region.SystemName}.amazonaws.com/{userPoolID}";

        creds.AddLogin(
            providerName,
            user.JWTID);

用户.JWTID在对cognito用户登录的响应中给出:

AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
if (authResponse.AuthenticationResult != null)
{
  user.JWTIT = authResponse.AuthenticationResult.IdToken
...

希望这对某人有帮助!

相关问题