Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

可以允许用户通过用户池登录,然后使用身份池访问 AWS 服务。

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

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

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

使用 AWS 管理控制台设置用户池

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

使用 AWS 管理控制台设置身份池

以下过程介绍了如何使用 AWS 管理控制台 将一个身份池与一个或多个用户池和客户端应用程序集成。

要配置身份池

  1. 打开 Amazon Cognito 控制台

  2. 选择 Manage Federated Identities

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

  4. Dashboard 页上,选择 Edit identity pool

  5. 展开 Authentication providers 部分。

  6. 选择 Cognito

  7. 键入 User Pool ID

  8. 键入 App Client ID。这必须与您在 AWS 管理控制台的 Your User Pools 部分中为 Amazon Cognito 创建应用程序时接收到的客户端应用程序 ID 一致。

  9. 如果您有其他应用程序或用户池,请选择 Add Another Provider,并针对每个用户池中的每个应用程序键入 User Pool IDApp Client ID

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

    如果成功,您将看到 Changes saved successfully. (在 Dashboard 页上)。

将用户池与身份池集成

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

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

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

JavaScriptAndroidiOS - Objective-CiOS - Swift
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)