在登录后使用身份池访问 Amazon 服务 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在登录后使用身份池访问 Amazon 服务

您可以允许用户使用用用用户池登录,然后访问Amazon服务。

成功进行身份验证后,您的 Web 或移动应用程序将收到来自 Amazon Cognito 的用户池令牌。您可以使用这些令牌检索Amazon凭证,允许您的应用程序访问其他Amazon服务。有关更多信息,请参阅Amazon Cognito 身份池入门 (联合身份)


        访问Amazon凭证通过包含身份池的用户池

有关使用身份池和用户池组控制对Amazon资源请参阅向用户池添加组基于角色的访问控制。有关身份池和 Amazon Identity and Access Management 的更多信息,另请参阅身份池概念 (联合身份)

使用 Amazon Web Services Management Console设置用户池

创建 Amazon Cognito 用户池并记下用户池 ID应用程序客户端 ID为您的每个客户端应用程序。有关创建用户池的更多信息,请参阅用户池入门

使用 Amazon Web Services Management Console设置身份池

以下过程介绍了如何使用 Amazon Web Services Management Console 将一个身份池与一个或多个用户池和客户端应用程序集成。

要配置身份池

  1. 打开Amazon Cognito 控制台

  2. 选择 Manage Identity Pools (管理身份池)

  3. 选择想要针对其启用 Amazon Cognito 用户池作为提供商的身份池的名称。

  4. 控制面板页上,选择编辑身份池

  5. 展开 Authentication providers 部分。

  6. 选择 Cognito

  7. 键入用户池 ID

  8. 键入应用程序客户端 ID。这必须与您在您的用户池的 部分Amazon Web Services Management ConsoleAmazon Cognito。

  9. 如果您有其他应用程序或用户池,请选择添加其他提供商,并针对每个用户池中的每个应用程序键入用户池 ID应用程序客户端 ID

  10. 如果您没有更多应用程序或用户池要添加,请选择保存更改

    如果成功,您将看到已成功保存更改。控制面板页.

将用户池与身份池集成

对您的应用程序用户进行身份验证后,将用户的身份令牌添加到凭证提供程序中的登录映射中。提供程序名称取决于 Amazon Cognito 用户池 ID。结构如下所示:

cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>

<region> 的值与用户池 ID 中的区域相同。例如:cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789

JavaScript
var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, result) { if (result) { console.log('You are now logged in.'); // Add the User's Id Token to the Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', Logins: { 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() } }); } }); }
Android
cognitoUser.getSessionInBackground(new AuthenticationHandler() { @Override public void onSuccess(CognitoUserSession session) { String idToken = session.getIdToken().getJWTToken(); Map<String, String> logins = new HashMap<String, String>(); logins.put("cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>", session.getIdToken().getJWTToken()); credentialsProvider.setLogins(logins); } });
iOS - Objective-C
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID" clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"]; [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"]; AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID" identityProviderManager:pool];
iOS - Swift
let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID") AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool") let pool = AWSCognitoIdentityUserPool(forKey: "UserPool") let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)