

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

# OAuth 2.0 补助金


Amazon Cognito 用户池 OAuth 2.0 授权服务器发布令牌以响应三种类型的 OAuth 2.0 [授权授权](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3)。您可以为用户池中的每个应用程序客户端设置支持的授权类型。您不能在同一应用程序客户端中启用*客户端凭证*授予作为*隐式* 或*授权码* 授予。隐式和授权码授予的请求从[对端点授权](authorization-endpoint.md)开始，而客户端凭证授予的请求从[令牌端点](token-endpoint.md)开始。

**授予授权代码**  
为了响应您的成功身份验证请求，授权服务器会在回调 URL 的 `code` 参数中添加一个授权码。然后，您必须与[令牌端点](token-endpoint.md)交换 ID、访问令牌和刷新令牌的代码。要请求授权码授予，请在请求中将 `response_type` 设置为 `code`。有关示例请求，请参阅[示例：授权代码授予](authorization-endpoint.md#sample-authorization-code-grant)。Amazon Cognito 在授权码授予中支持[代码交换的证明密钥（PKCE）](using-pkce-in-authorization-code.md)。  
授权码授予是最安全的授权授予形式。它不会直接向您的用户显示令牌内容。相反，您的应用程序负责检索和安全存储用户的令牌。在 Amazon Cognito 中，授权码授予是从授权服务器获取所有三种令牌类型（ID、访问和刷新）的唯一方法。您也可以通过 Amazon Cognito 用户池 API 从身份验证中获取所有三种令牌类型，但是 API 不使用除 `aws.cognito.signin.user.admin` 以外的范围发布访问令牌。

**隐式授予**  
为了响应成功的身份验证请求，授权服务器会在 `access_token` 参数中附加一个访问令牌，并在您的回调 URL 的 `id_token` 参数中附加一个 ID 令牌。隐式授予不要求与[令牌端点](token-endpoint.md)进行额外的交互。要请求隐式授予，请在请求中将 `response_type` 设置为 `token`。隐式授予仅生成 ID 和访问令牌。有关示例请求，请参阅[示例：不带 `openid` 范围的令牌（隐式）授权](authorization-endpoint.md#sample-token-grant-without-openid-scope)。  
隐式授予是旧版授权授予。与授权码授予不同，用户可以拦截和检查您的令牌。要防止通过隐式授予交付令牌，请将您的应用程序客户端配置为仅支持授权码授予。

**客户端凭证**  
客户凭证是一种仅限授权的访问授权。 machine-to-machine要获得客户凭证授予，请绕过[对端点授权](authorization-endpoint.md)，并直接向[令牌端点](token-endpoint.md)生成请求。您的应用程序客户端必须具有客户端密钥，并且仅支持客户端凭证授予。为了响应您的成功请求，授权服务器会返回访问令牌。  
来自客户端凭证授予的访问令牌是一种包含 OAuth 2.0 范围的授权机制。通常，令牌包含授权 HTTP 操作受访问 APIs保护的自定义作用域声明。有关更多信息，请参阅 [作用域、M2M 和资源服务器](cognito-user-pools-define-resource-servers.md)。  
客户凭证授予会增加您的 AWS 账单费用。有关更多信息，请参阅 [Amazon Cognito 定价](https://aws.amazon.com/cognito/pricing)。

**刷新令牌**  
您可以直接从[令牌端点](token-endpoint.md)请求刷新令牌授予。此授予会返回新的 ID 令牌和访问令牌，以交换有效的刷新令牌。

有关这些赠款及其实施的更多视角，请参阅如何[在 Amazon Cognito 中使用 OAuth 2.0：在*AWS 安全*博客中了解不同的 OAuth 2.0 授权](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/)。