将 Amazon Cognito 用于移动应用程序 - AWS Identity and Access Management

将 Amazon Cognito 用于移动应用程序

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

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

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

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


      使用 Amazon Cognito 为移动应用程序用户进行联合身份验证的示例工作流

  1. 客户在移动设备上启动您的应用程序。应用程序要求用户登录。

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

  3. 应用程序使用 Amazon Cognito API 操作 GetIdGetCredentialsForIdentity 将 Login with Amazon ID 令牌交换成 Amazon Cognito 令牌。Amazon Cognito 已配置为信任 Login with Amazon 项目,它会生成一个令牌,用于与 AWS STS 交换临时会话凭证。

  4. 该应用程序从 Amazon Cognito 接收临时安全凭证。您的应用程序还可使用 Amazon Cognito 中的基本(经典)工作流程,通过 AssumeRoleWithWebIdentity 从 AWS STS 中检索令牌。有关更多信息,请参阅《Amazon Cognito 开发人员指南》中的身份池(联合身份)身份验证流程

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

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

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

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

  3. AWS Amplify 与您的应用程序集成,然后导入使用 Amazon Cognito 所需的文件。

  4. 创建一个 Amazon Cognito 凭证提供程序实例,并传递身份池 ID、您的 AWS 账户 账号,以及与身份池关联的角色的 Amazon 资源名称(ARN)。AWS Management Console 中的 Amazon Cognito 向导提供了可帮助您入门的示例代码。

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

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