首页 文章

使用AWS Cognito Federated Identities进行身份验证失败,因为未对用户进行身份验证

提问于
浏览
0

我正在为调用AWS-Lambda的Android应用程序添加适当的身份验证 . 应用用户需要注册 . 该应用应该支持公共登录提供商,比如谷歌或Facebook . 为此,我想我会使用AWS Cognito和Federated Identities .

我正在尝试遵循由https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication记录的工作流程

  • GetId

  • GetOpenIdToken

  • AssumeRoleWithWebIdentity

在AWS控制台中,我创建了一个AWS Identity Pool,并将Google配置为身份验证提供程序 . 我已经禁用了未经身份验证的访问,因为我需要用户始终进行身份验证 .

我遇到了调用GetId的问题,这是该工作流程的第一步,它返回并且出现错误,通知我未对此标识池启用未经身份验证的访问 . 是的,我的用户正在进行身份验证,在工作流的早期用户还无法进行身份验证,重点不在于此 .

这是代码(Xamarin.Android C#)

using Amazon.CognitoIdentity;

var shortLivedAWScredentials = new CognitoAWSCredentials(
    "identity-pool-id",
    AWSConfigs.RegionEndpoint);

var cognitoClient = new AmazonCognitoIdentityClient(
    shortLivedAWScredentials,
    AWSConfigs.RegionEndpoint);

var logins = new Dictionary<string, string>();
logins["accounts.google.com"] = "id token";

var request = new GetIdRequest();
request.IdentityPoolId = "identity-pool-id";
request.Logins = logins;

var task = cognitoClient.GetIdAsync(request);
var result = await task;

GetId调用抛出异常,告诉我此标识池不支持未经身份验证的访问 . 我对使用联合身份识别的AWS Cognito进行身份验证误解了哪些部分?

Update :这是否意味着禁止AWS Identity Pool进行未经身份验证的访问,我需要创建一个IAM帐户,该帐户只能访问该身份池,并将其凭据存储在移动应用程序中?这样我的移动应用就可以对最终用户进行身份验证 . 如果确实如此,那么在移动应用程序中存储访问密钥是否有很好的解决方案可以阻止大多数廉价的逆向工程?如果访问密钥存储在移动应用程序中,那么这确实提供了比未经身份验证的身份池更多的安全性吗?

1 回答

  • 1

    我找到了一个不需要调用以下内容的解决方案

    • GetId

    • GetOpenIdToken

    • AssumeRoleWithWebIdentity

    相反

    var awsCredentials = new CognitoAWSCredentials(
        "Identity Pool ID",
        AWSConfigs.RegionEndpoint);
    awsCredentials.AddLogin("accounts.google.com", token);
    

    另请参阅this post,其中介绍了如何将Cognito联合到Google .

相关问题