我有一个Java后端服务,我想使用AWS Cognito提供身份验证和对AWS服务的访问。该服务没有有关AWS账户的任何信息。我看到所有客户端都需要AWS凭据或管理员凭据才能创建它们。如何仅使用用户池中的用户而不了解AWS账户来授予对该服务的访问权限?
我已经尝试了客户端和服务器端,但是它们都需要AWS凭证来创建用户池和身份池客户端,然后才能获取访问令牌。
try {
credentials = new ProfileCredentialsProvider("default").getCredentials();
} catch (Exception e) {
throw new AmazonClientException(
"Cannot load the credentials from the credential profiles file. " +
"Please make sure that your credentials file is at the correct " +
"location (/Users/ayushaws/.aws/credentials), and is in valid format.",
e);
}
// Creating Cognito user pool client
AWSCognitoIdentityProvider client = AWSCognitoIdentityProviderClientBuilder.standard()
.withRegion("us-east-1")
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.build();
这是我当前创建客户的方式。我的问题是,这首先需要我的凭据才能创建客户端。如果使用的应用程序不在AWS范围内并且不了解AWS账户,我们如何创建客户端。
答案 0 :(得分:0)
您需要使用具有足够特权的凭据来创建Cognito用户池和Cognito身份池。由于您正在使用Cognito,因此您应该能够在客户端应用程序中处理身份验证和访问,并且您的应用程序不需要长期的凭据,因为Identity Pool将提供必要的凭据。
在您的客户端应用程序中,用户将直接登录到Cognito用户池。成功登录用户池后,他们将收到包含IdToken
的响应。然后,您将IdToken
添加到凭据映射中,这将授予用户访问“身份池身份验证IAM”角色允许的资源的权限。
您可以在AWS Cognito docs中了解有关如何结合使用Cognito用户池和Cognito身份池的更多信息。