如何在 Amazon Cognito 中使用自定义作用域授予对 API Gateway API 的访问权限?

2 分钟阅读
0

我想在 Amazon Cognito 用户池中使用自定义作用域授予对 Amazon API Gateway API 资源的访问权限。

简短描述

在您的 Amazon Cognito 用户池中定义具有自定义作用域的资源服务器。然后,为您的 API Gateway API 创建和配置 Amazon Cognito 授权程序,以对您的 API 资源请求进行身份验证。

如果您有不同的应用程序客户端,需要对您的 API 资源提供不同级别的访问权限,则可以定义不同的访问作用域。考虑不同的应用程序客户端可能需要的精细访问级别,然后进行相应的设计。

解决方法

创建以下先决条件:

在用户池中添加具有自定义作用域的资源服务器

1.    打开 Amazon Cognito 控制台

2.    定义资源服务器和自定义作用域

3.    创建资源服务器后,选择应用程序集成选项卡。

4.    在应用程序客户端和分析部分中,选择您的应用程序客户端。

5.    从托管用户界面部分,选择编辑。然后,完成以下步骤:
OAuth 2.0 授权类型下拉列表中,选择隐式授权
自定义作用域下拉列表中,选择您定义的自定义作用域。
**注意:**自定义作用域的格式为 resourceServerIdentifier/scopeName。当客户端在 OAuth 2.0 流程中请求自定义作用域时,请求必须包含此格式的作用域的完整标识符。

6.    选择保存更改

如果您的移动应用程序有服务器端组件,那么请使用授权码授权流程和代码交换证明密钥(PKCE)。通过授权码授权流程,令牌更加安全,并且永远不会直接暴露给最终用户。

如果您的设置不包含任何服务器端逻辑,则可以使用隐式授权流程。隐式授权不会生成刷新令牌。这样可以防止刷新令牌暴露给客户端。刷新令牌的有效期更长,可以检索较新的 ID 和访问令牌。

**重要说明:**不要将刷新令牌存储在客户端环境中。

有关详细信息,请参阅应用程序客户端设置术语。有关 Amazon Cognito 用户池 OAuth 2.0 授权的详细信息,请参阅了解 Amazon Cognito 用户池 OAuth 2.0 授权

创建授权程序并将其与您的 API 集成

要完成以下步骤,请按照说明将 REST API 与 Amazon Cognito 用户池集成。

1.    要创建授权者,请按照使用 API Gateway 控制台创建 COGNITO_USER_POOLS 授权程序下的说明进行操作。
注意:创建后,控制台中会出现一个用于测试您的授权程序的选项。这需要身份令牌。要使用访问令牌在控制台之外测试您的设置,请参阅本文中的获取用户池访问令牌以进行测试部分。

2.    要将授权程序与您的 API 集成,请按照在方法上配置 COGNITO_USER_POOLS 授权程序
**注意:**对于 OAuth 作用域,以 resourceServerIdentifier/scopeName 格式输入自定义作用域的完整标识符。

3.    部署 API

获取用户池访问令牌以进行测试

使用用户池的托管 Web 用户界面登录,并从 Amazon Cognito 授权服务器检索访问令牌。或者,使用移动和 web AWS SDK 中提供的 OAuth 2.0 端点实施来检索访问令牌。

**注意:**当应用程序客户端通过托管的 Web 用户界面请求身份验证时,该请求可以包括系统预留作用域自定义作用域的任意组合。如果客户端不请求任何作用域,则身份验证服务器会返回一个访问令牌,其中包含与该客户端关联的所有作用域。在设计应用程序客户端时,请确保客户端在请求中包含预期的作用域,以避免授予不必要的权限。

1.    在 Web 浏览器中输入以下 URL:
https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
注意:yourDomainPrefixregion 替换为您的用户池的值。可在 Amazon Cognito 控制台上的用户池域名选项卡上找到它们。
yourClientId 替换为应用程序客户端的 ID,并将 redirectUrl 替换为应用程序客户端的回拨 URL。可在控制台用户池的应用程序客户端设置选项卡上找到它们。有关详细信息,请参阅登录端点

2.    以您所创建用户的身份登录您的用户池。

3.    从地址栏的 URL 中复制访问令牌。令牌是 access_token= 之后的一长串字符。

调用您的 API 作为测试

作为测试,使用访问令牌作为授权标头的值,使用访问令牌调用您的 API。您可以使用 Postman 应用程序(位于 Postman 网站上),也可以使用命令行界面中的 curl 命令。有关 curl 的详细信息,请参阅 curl 项目网站

要使用 curl,请运行以下命令:

curl https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName -H "Authorization: accessToken"

**注意:**将 restApiId 替换为 API ID。将 region 替换为 API 的 AWS 区域。将 stageName 替换为部署您的 API 的阶段的名称。将 resourceName 替换为 API 资源的名称。将 accessToken 替换为所复制的令牌。有关详细信息,请参阅在 Amazon API Gateway 中调用 REST API

正确配置所有内容后,您将获得一个 200 OK 的响应代码。

相关信息

配置用户池应用程序客户端

访问令牌作用域(OAuth 2.0 授权框架)

AWS 官方
AWS 官方已更新 1 年前