AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将 Amazon Cognito 用于移动应用程序

使用 Web 联合身份验证的首选方式是使用 Amazon Cognito。例如,开发人员 Adele 正在制作一款用于移动设备的游戏,其中将分数和个人资料等用户数据存储在 Amazon S3 和 Amazon DynamoDB 中。Adele 还可将此数据存储在本地设备上,并使用 Amazon Cognito 来跨设备保持数据的同步。她知道,出于安全性和维护的原因,不应随游戏分配长期 AWS 安全凭证。她还知道,这个游戏可能有大量用户。出于所有这些原因,她不想在 IAM 中为每个玩家都新建用户身份,而是将游戏制作成用户可使用其已通过知名的身份提供商 (如 Login with AmazonFacebookGoogle 或任何 OpenID Connect (OIDC) 兼容的身份提供商) 建立的身份进行登录。她的游戏可利用其中某个提供商的身份验证机制验证用户的身份。

为使该移动应用程序可访问她的 AWS 资源,Adele 首先向她选择的 IdP 注册一个开发人员 ID。她还按其中某个提供商的要求配置该应用程序。在她的包含该游戏的 Amazon S3 存储桶和 DynamoDB 表的 AWS 账户中,Adele 使用 Amazon Cognito 创建了精确定义该游戏所需权限的 IAM 角色。如果她使用的是 OIDC IdP,她还可创建 IAM OIDC 身份提供商实体来在其 AWS 账户和该 IdP 之间建立信任关系。

在应用程序的代码中,Adele 调用其先前配置的 IdP 的登录接口。IdP 处理让用户登录的所有详细信息,然后应用程序从提供商那里获得 OAuth 访问令牌或 OIDC ID 令牌。Adele 的应用程序可使用此身份验证信息换取一组临时安全凭证 (包括 AWS 访问密钥 ID、秘密访问密钥和会话令牌)。然后,应用程序可以使用这些凭证访问 AWS 提供的 Web 服务。该应用程序仅获得在其担任的角色中定义的权限。

下图以 Login with Amazon 作为 IdP,展示此过程运行方式的简化流程。对于步骤 2,该应用程序还可以使用 Facebook、Google 或任何 OIDC 兼容的身份提供商,但此处不进行说明。

 使用 Amazon Cognito 为移动应用程序联合身份用户的示例工作流
  1. 客户在移动设备上启动您的应用程序。应用程序要求用户登录。

  2. 应用程序使用 Login with Amazon 资源接受用户凭证。

  3. 应用程序使用 Cognito API 将 Login with Amazon ID 令牌交换成 Cognito 令牌。

  4. 应用程序从 AWS STS 请求临时安全凭证,并传递 Cognito 令牌。

  5. 应用程序可使用临时安全凭证访问应用程序运行所需的任何 AWS 资源。与临时安全凭证关联的角色及其分配的策略将决定可访问的资源。

使用以下过程将您的应用程序配置为使用 Amazon Cognito 对用户进行身份验证,并向您的应用程序授予对 AWS 资源的访问权限。有关完成此操作的具体步骤,请参阅 Amazon Cognito 的相关文档。

  1. (可选) 使用 Login with Amazon、Facebook、Google 或任何其他 OpenID Connect (OIDC) 兼容的身份提供商注册为开发人员,并使用这些提供商配置一个或多个应用程序。此步骤是可选的,因为 Amazon Cognito 还支持您的用户进行未经身份验证的 (来宾) 访问。

  2. 转至 AWS 管理控制台 中的 Amazon Cognito。使用 Amazon Cognito 向导创建一个身份池,身份池是一种供 Amazon Cognito 保留为您的应用程序组织的最终用户身份的容器。您可以在应用程序间共享身份池。在设置身份池时,Amazon Cognito 将创建一个或两个定义 Amazon Cognito 用户的权限的 IAM 角色 (一个角色针对经过身份验证的身份,另一个角色针对未经身份验证的“来宾”身份)。

  3. 下载适用于 iOS 的 AWS 开发工具包适用于 Android 的 AWS 开发工具包并与您的应用程序集成,然后导入使用 Amazon Cognito 所需的文件。

  4. 创建一个 Amazon Cognito 证书提供程序实例,并传递身份池 ID、您的 AWS 账号,以及与身份池关联的角色的 Amazon 资源名称 (ARN)。AWS 管理控制台 中的 Amazon Cognito 向导提供了示例代码来帮助您开始使用。

  5. 当您的应用程序访问 AWS 资源时,可将该凭证提供程序实例传递给客户端对象,从而将临时安全凭证传递给该客户端。证书的权限基于您之前定义的角色。

有关更多信息,请参阅下列内容: