一般性问题
问:什么是 Amazon Cognito?
借助 Amazon Cognito,您可以轻松为移动和 Web 应用程序添加用户登录功能。Amazon Cognito 支持通过外部身份提供商对用户进行身份验证,并提供临时安全凭证,以供访问应用程序在 亚马逊云科技 中的后端资源或 Amazon API Gateway 的后端服务。Amazon Cognito 可与支持 SAML 或 OpenID Connect 的外部身份提供商和 Google、Amazon 等社交身份提供商配合使用,同时您还能集成您自己的身份提供商。
借助 Amazon Cognito,您可以专注于打造卓越的应用程序体验,而不用担心如何构建、保护和扩展解决方案来处理用户身份验证。
问:哪些人应该使用 Amazon Cognito?
Amazon Cognito 是专为想要将用户身份验证添加到其移动和 Web 应用程序中的开发人员设计的。开发人员可以使用 Cognito Identity 为他们的应用程序添加注册和登录功能,以便用户能够安全访问其应用程序的资源。
问:如何开始使用 Amazon Cognito?
您可以通过访问 亚马逊云科技 控制台轻松入门。如果您没有 Amazon Web Services 账户,可以在登录控制台时创建一个账户。为联合身份创建一个身份池后,您可以下载 Amazon 移动软件开发工具包并将其与您的应用程序集成。
问:Amazon Cognito 支持哪些平台?
选配的 Amazon 移动软件开发工具包中包含对 Cognito 的支持,目前支持的平台有 iOS、Android、Unity 和 Kindle Fire。另外,适用于 JavaScript 的 Amazon 开发工具包中也包含 Cognito。
问:我必须使用 Amazon 移动软件开发工具包吗?
否。Cognito 以 Web 服务的形式提供其控制和数据 API。您可以使用自己的客户端库来直接调用服务器端 API。
联合身份并提供对 亚马逊云科技 资源的安全访问
问:我能否使用 Cognito Identity 来联合身份并提供对 亚马逊云科技 资源的安全访问?
能。Cognito Identity 支持通过外部身份提供商对用户进行身份验证,并提供临时安全凭证,以供访问应用程序在 亚马逊云科技 中的后端资源或 Amazon API Gateway 后的服务。Amazon Cognito 可与支持 SAML 或 OpenID Connect 的外部身份提供商和 Google、Amazon 等社交身份提供商配合使用,同时您还能集成您自己的身份提供商。
问:Amazon Cognito Identity 支持哪些公共身份提供商?
您可以使用 Amazon、Google 和其他任何兼容 OpenID Connect 的身份提供商。
问:什么是身份池?
身份池是 Cognito Identity 用于保持应用程序的联合身份井然有序的容器。身份池将来自社交身份提供商的联合身份与唯一的用户特定标识符相关联。身份池不存储任何用户资料。一个身份池可以关联一个或多个应用。如果您为两个应用使用两个不同的身份池,则同一个最终用户在每个身份池中都会有一个不同的唯一标识符。
问:登录流程如何与公共身份提供商配合工作?
移动应用程序会使用提供商的软件开发工具包对该身份提供商 (IdP) 进行身份验证。使用 IdP 对最终用户进行身份验证后,从 IdP 返回的 OAuth 或 OpenID Connect 令牌或 SAML 断言会由应用程序发送给 Cognito Identity,然后由 Cognito Identity 为用户返回一个新的 Cognito ID 和一组具有有限权限的临时 亚马逊云科技 凭证。
问:我能否注册自己的用户并对其进行身份验证?
Cognito Identity 可与您现有的身份验证系统集成。只需一次简单的 API 调用,您就可以根据自己的唯一用户标识符来检索最终用户的 Cognito ID。检索到 Cognito ID 和 Cognito Identity 提供的 OpenID 令牌之后,您便可使用 Cognito Identity 客户端软件开发工具包来访问 亚马逊云科技 资源以及同步用户数据。Cognito Identity 是完全托管的身份提供商,旨在让您能够更轻松地为移动和 Web 应用程序实现用户注册和登录功能。
问:Cognito Identity 如何帮助我控制权限和安全访问 亚马逊云科技 服务?
Cognito Identity 会向您的用户分配一组具有有限权限的临时凭证,用于访问您的 亚马逊云科技 资源,因此您无需使用自己的 亚马逊云科技 账户凭证。每名用户的权限均通过您创建的 Amazon IAM 角色进行控制。您可以通过定义规则来为每名用户选择 IAM 角色;如果您在 Cognito 用户池中使用组,则可以按照组来分配 IAM 角色。Cognito Identity 还允许您为未经身份验证的访客用户单独定义一个具有有限权限的 IAM 角色。此外,您也可以使用 Cognito 为用户生成的唯一标识符来控制对特定资源的访问。例如,您可以为 S3 存储桶创建一项策略,只允许每位用户访问该存储桶中他们自己的文件夹。
问:使用公共身份提供商时,Amazon Cognito Identity 是否会存储用户的凭证?
不会,您的应用程序通过直接与受支持的公共身份提供商 (Amazon、Google 或兼容 OpenID Connect 的提供商) 通信来对用户进行身份验证。Cognito Identity 不接收或存储用户凭证。Cognito Identity 使用身份提供商提供的令牌来获取唯一用户标识符,然后使用单向哈希对其进行哈希处理,这样在将来就能够再次识别同一用户,而无需存储实际的用户标识符。
问:Cognito Identity 是否会从身份提供商处接收或存储与我的用户相关的保密信息?
否。Cognito Identity 不会从身份提供商处接收任何保密信息(例如电子邮件地址、好友列表等)。
问:使用 Cognito Identity,我是否还需要有自己的后端身份验证系统?
否。Cognito Identity 支持通过 Amazon 和 Google 登录,还可以对未经身份验证的用户提供支持。Cognito Identity 支持联合身份验证和 亚马逊云科技 访问令牌分配,无需编写任何后端代码。
问:如果我不想强制用户登录,怎么办?
对于未经身份验证的用户和经过身份验证的用户,Cognito Identity 均支持令牌的创建和贩售流程。这样就不再需要为应用设计额外的登录界面,但仍可让用户使用具有有限权限的临时凭证访问 亚马逊云科技 资源。