使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问 - Amazon API Gateway

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问

作为使用 IAM 角色和策略Lambda 授权方(以前称为自定义授权方)的替代方案,您可以使用 Amazon Cognito 用户池来控制谁可以在 Amazon API Gateway 中访问您的 API。

要将 Amazon Cognito 用户池与您的 API 一起使用,您必须先创建 COGNITO_USER_POOLS 类型的授权方,然后配置 API 方法以使用该授权方。部署 API 之后,客户端必须先将用户注册到用户池,获取用户的身份令牌或访问令牌,然后使用令牌之一调用 API 方法,这通常设置为请求的 Authorization 标头。只有提供了所需的令牌并且提供的令牌有效时,API 调用才会成功,否则,客户端未获得授权来执行调用,因为客户端没有可用于授权的凭证。

使用身份令牌,基于已登录用户的身份声明来授权 API 调用。使用访问令牌,基于指定访问受保护资源的自定义范围授权 API 调用。有关更多信息,请参阅将令牌与用户池结合使用资源服务器和自定义范围

要为 API 创建和配置 Amazon Cognito 用户池,请执行以下任务:

  • 使用 Amazon Cognito 控制台、CLI/开发工具包或 API 创建用户池,或者使用由其他 AWS 账户拥有的用户池。

  • 使用 API Gateway 控制台、CLI/开发工具包或 API 创建具有选定用户池的 API Gateway Authorizer。

  • 使用 API Gateway 控制台、CLI/开发工具包或 API,在所选 API 方法上启用授权方。

要在启用了用户池时调用任意 API 方法,您的客户端执行以下任务:

  • 使用 Amazon Cognito CLI/开发工具包或 API 将用户注册到所选用户池,获取身份令牌或访问令牌。要了解有关使用 SDK 的更多信息,请参阅使用 SDK 的 Amazon Cognito 代码示例

  • 使用客户端特定的框架调用已部署的 API Gateway API 并在 Authorization 标头中提供合适的令牌。

作为 API 开发人员,您必须向客户端开发人员提供用户池 ID、客户端 ID,并可能需要提供作为用户池的一部分定义的关联客户端密钥。

注意

要允许用户使用 Amazon Cognito 凭证登录,同时还获取用于 IAM 角色权限的临时凭证,请使用 Amazon Cognito 联合身份。对于每个 API 资源终端节点 HTTP 方法,将授权类型、类别 Method Execution 设置为 AWS_IAM

在此部分中,我们介绍如何创建用户池、如何将 API Gateway API 与用户池集成,以及如何调用与用户池集成的 API。