使用 AWS Cognito 联合身份进行身份验证失败,因为用户未通过身份验证
Authenticating with AWS Cognito Federated Identities fails because user is not authenticated
我正在向调用 AWS-Lambda 的 android 应用程序添加适当的身份验证。应用程序用户需要注册。该应用程序应支持 public 登录提供商,例如 Google+ 或 Facebook。为此,我想我会使用 AWS Cognito 和联合身份。
我正在尝试遵循 https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication 记录的工作流程
其中包括
- GetId
- 获取OpenIdToken
- AssumeRoleWithWebIdentity
在 AWS 控制台中,我创建了一个 AWS 身份池并将 Google+ 配置为身份验证提供程序。我已禁用未经身份验证的访问,因为我需要始终对用户进行身份验证。
我在调用 GetId 时遇到问题,这是该工作流程的第一步,它 returns 和错误通知我未为此身份池启用未经身份验证的访问。是的,我的用户正在进行身份验证,在工作流的早期用户还无法通过身份验证,这就是重点,不是吗。
这是代码 (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 帐户,该帐户有权仅访问该身份池,并将其凭据存储在移动应用程序中?只是为了让我的移动应用程序可以对最终用户进行身份验证。
如果这确实是如何完成的,那么是否有好的解决方案可以将访问密钥存储在移动应用程序中,从而阻止大多数廉价的逆向工程?如果访问密钥存储在移动应用程序中,这真的比让身份池未经身份验证提供更多的安全性吗?
我找到了一个不需要调用以下方法的解决方案
- GetId
- 获取OpenIdToken
- AssumeRoleWithWebIdentity
改为
var awsCredentials = new CognitoAWSCredentials(
"Identity Pool ID",
AWSConfigs.RegionEndpoint);
awsCredentials.AddLogin("accounts.google.com", token);
另请参阅 ,其中解释了如何将 Cognito 联合到 Google。
我正在向调用 AWS-Lambda 的 android 应用程序添加适当的身份验证。应用程序用户需要注册。该应用程序应支持 public 登录提供商,例如 Google+ 或 Facebook。为此,我想我会使用 AWS Cognito 和联合身份。
我正在尝试遵循 https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication 记录的工作流程 其中包括
- GetId
- 获取OpenIdToken
- AssumeRoleWithWebIdentity
在 AWS 控制台中,我创建了一个 AWS 身份池并将 Google+ 配置为身份验证提供程序。我已禁用未经身份验证的访问,因为我需要始终对用户进行身份验证。
我在调用 GetId 时遇到问题,这是该工作流程的第一步,它 returns 和错误通知我未为此身份池启用未经身份验证的访问。是的,我的用户正在进行身份验证,在工作流的早期用户还无法通过身份验证,这就是重点,不是吗。
这是代码 (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 帐户,该帐户有权仅访问该身份池,并将其凭据存储在移动应用程序中?只是为了让我的移动应用程序可以对最终用户进行身份验证。 如果这确实是如何完成的,那么是否有好的解决方案可以将访问密钥存储在移动应用程序中,从而阻止大多数廉价的逆向工程?如果访问密钥存储在移动应用程序中,这真的比让身份池未经身份验证提供更多的安全性吗?
我找到了一个不需要调用以下方法的解决方案
- GetId
- 获取OpenIdToken
- AssumeRoleWithWebIdentity
改为
var awsCredentials = new CognitoAWSCredentials(
"Identity Pool ID",
AWSConfigs.RegionEndpoint);
awsCredentials.AddLogin("accounts.google.com", token);
另请参阅