

# 使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问
<a name="apigateway-integrate-with-cognito"></a>

作为使用 [IAM 角色和策略](permissions.md)或 [Lambda 授权方](apigateway-use-lambda-authorizer.md)（以前称为自定义授权方）的替代方案，您可以使用 [Amazon Cognito 用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-identity-pools.html)来控制谁可以在 Amazon API Gateway 中访问您的 API。

要将 Amazon Cognito 用户池与您的 API 一起使用，您必须先创建 `COGNITO_USER_POOLS` 类型的授权方，然后配置 API 方法以使用该授权方。部署 API 之后，客户端必须先将用户注册到用户池，获取用户的[身份令牌或访问令牌](https://docs.amazonaws.cn/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)，然后使用令牌之一调用 API 方法，这通常设置为请求的 `Authorization` 标头。只有提供了所需的令牌并且提供的令牌有效时，API 调用才会成功，否则，客户端未获得授权来执行调用，因为客户端没有可用于授权的凭证。

使用身份令牌，基于已登录用户的身份声明来授权 API 调用。使用访问令牌，基于指定访问受保护资源的自定义范围授权 API 调用。有关更多信息，请参阅[将令牌与用户池结合使用](https://docs.amazonaws.cn/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html)和[资源服务器和自定义范围](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html)。

要为 API 创建和配置 Amazon Cognito 用户池，请执行以下任务：
+ 使用 Amazon Cognito 控制台、CLI/开发工具包或 API 创建用户池，或者使用由其他Amazon账户拥有的用户池。
+ 使用 API Gateway 控制台、CLI/开发工具包或 API 创建具有选定用户池的 API Gateway Authorizer。
+ 使用 API Gateway 控制台、CLI/开发工具包或 API，在所选 API 方法上启用授权方。

 要在启用了用户池时调用任意 API 方法，您的客户端执行以下任务：
+  使用 Amazon Cognito CLI/SDK 或 API 将用户注册到所选用户池，并获取身份令牌或访问令牌。要了解有关使用 SDK 的更多信息，请参阅 [Code examples for Amazon Cognito using Amazon SDKs](https://docs.amazonaws.cn/cognito/latest/developerguide/service_code_examples.html)。
+  使用客户端特定的框架调用已部署的 API Gateway API 并在 `Authorization` 标头中提供合适的令牌。

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

**注意**  
要允许用户使用 Amazon Cognito 凭证登录，同时还获取用于 IAM 角色权限的临时凭证，请使用 [Amazon Cognito 联合身份](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-identity.html)。对于每个 API 资源端点 HTTP 方法，将授权类型、类别 `Method Execution` 设置为 `AWS_IAM`。

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

**Topics**
+ [为 REST API 创建 Amazon Cognito 授权用户池](apigateway-create-cognito-user-pool.md)
+ [将 REST API 与 Amazon Cognito 用户池集成](apigateway-enable-cognito-user-pool.md)
+ [调用与 Amazon Cognito 用户池集成的 REST API](apigateway-invoke-api-integrated-with-cognito-user-pool.md)
+ [使用 API Gateway 控制台为 REST API 配置跨账户 Amazon Cognito 授权方](apigateway-cross-account-cognito-authorizer.md)
+ [使用 Amazon CloudFormation 为 REST API 创建 Amazon Cognito 授权方](apigateway-cognito-authorizer-cfn.md)