【发布时间】:2018-03-22 03:43:10
【问题描述】:
我正在向调用 AWS-Lambda 的 Android 应用程序添加适当的身份验证。应用程序用户需要注册。该应用程序应支持公共登录提供商,例如 Google+ 或 Facebook。为此,我想我会将 AWS Cognito 与联合身份一起使用。
我正在尝试遵循https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication 记录的工作流程 其中包括
- 获取Id
- 获取OpenIdToken
- AssumeRoleWithWebIdentity
在 AWS 控制台中,我创建了一个 AWS 身份池并将 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 进行身份验证,我误解了哪一部分?
更新: 那么这是否意味着对未经身份验证的访问禁用 AWS 身份池,我需要创建一个 IAM 账户,该账户有权仅访问该身份池,并将其凭证存储在移动应用程序中?只是为了让我的移动应用程序可以对最终用户进行身份验证。 如果确实是这样做的,那么是否有很好的解决方案可以将访问密钥存储在移动应用程序中,从而阻止大多数廉价的逆向工程?如果访问密钥存储在移动应用程序中,这真的比让身份池未经身份验证更安全吗?
【问题讨论】:
标签: xamarin.android amazon-cognito aws-cognito federated-identity