在登录后使用身份池访问 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 将一个身份池与一个或多个用户池和客户端应用程序集成。

Original console

要配置身份池

  1. 打开 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

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

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

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

  5. 展开 Authentication providers 部分。

  6. 选择 Cognito

  7. 输入 User Pool ID(用户池 ID)。

  8. 输入 App Client ID(应用程序客户端 ID)。这必须与您在Amazon Web Services Management Console的 Your User Pools (您的用户池) 部分中为 Amazon Cognito 创建应用程序时接收到的客户端应用程序 ID 一致。

  9. 如果您有其它应用程序或用户池,请选择 Add Another Provider(添加其它提供商),并针对每个用户池中的每个应用程序输入 User Pool ID(用户池 ID)和 App Client ID(应用程序客户端 ID)。

  10. 如果您没有更多应用程序或用户池要添加,请选择保存更改。如果成功,Dashboard(控制面板)页面上将显示 Changes saved successfully(已成功保存更改)消息。

New console

要配置身份池

  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 Federated identities(联合身份)。

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

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

  5. 展开 Authentication providers 部分。

  6. 选择 Cognito

  7. 输入 User Pool ID(用户池 ID)。

  8. 输入 App Client ID(应用程序客户端 ID)。这必须与您在控制台的 User pools(用户池)部分中创建应用程序时接收到的客户端应用程序 ID 一致。

  9. 如果您有其它应用程序或用户池,请选择 Add Another Provider(添加其它提供商),并针对每个用户池中的每个应用程序输入 User Pool ID(用户池 ID)和 App Client ID(应用程序客户端 ID)。

  10. 如果您没有更多应用程序或用户池要添加,请选择保存更改。如果成功,Dashboard(控制面板)页面上将显示 Changes saved successfully(已成功保存更改)消息。

将用户池与身份池集成

对您的应用程序用户进行身份验证后,将用户的身份令牌添加到凭证提供程序中的登录映射中。提供商名称取决于 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)