Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

为您的用户池定义资源服务器

在为用户池配置域后,Amazon Cognito 服务会自动预置一个托管 Web UI,可使用此 UI 向应用程序添加注册页和登录页。有关更多信息,请参阅 步骤 2.添加应用程序以启用托管 Web UI

资源服务器 是访问受保护的资源的服务器。它处理从具有访问令牌的应用程序发送的身份验证请求。通常情况下,资源服务器将提供 CRUD API 来提出这些访问请求。此 API 可以在 Amazon API Gateway 中或 AWS 外部托管。应用程序会将 API 调用中的访问令牌传递到资源服务器。当应用程序在访问请求中传递令牌时,它应该将访问令牌视为不透明的。资源服务器将检查访问令牌以确定是否应授予访问权限。

注意

您的资源服务器在处理访问令牌内的任何声明之前必须验证访问令牌的签名和到期日期。有关验证和使用用户池令牌的更多信息,请参阅此博客文章。Amazon API Gateway 是用于检查访问令牌和保护您的资源的一个很好的选择。有关 API 网关 自定义授权方的更多信息,请参阅使用 API 网关自定义授权方

范围 是应用程序可请求的对资源的访问权限的级别。例如,如果您有一个照片资源服务器,它可能会定义两个范围:一个用于对照片的读取访问,另一个用于写入/删除访问。当应用程序发出请求访问权限的 API 调用并传递访问令牌时,该令牌将有一个或多个嵌入到其中的范围。

概述

利用 Amazon Cognito,应用程序开发人员可以创建自己的 OAuth2.0 资源服务器并在其中定义自定义范围。自定义范围随后可以与某个客户端关联,该客户端可以在 OAuth2.0 授权代码授予流、隐式流和客户端凭证流中请求它们。将在访问令牌的 scope 声明中添加自定义范围。客户端可对其资源服务器使用访问令牌,然后服务器基于令牌中给出的范围做出授权决定。有关访问令牌范围的更多信息,请参阅将令牌与用户池结合使用

注意

您的资源服务器在处理访问令牌内的任何声明之前必须验证访问令牌的签名和到期日期。

注意

如果某个应用程序客户端有客户端密钥,则它只能使用客户端凭证流。

管理资源服务器和自定义范围

在创建资源服务器时,您必须提供资源服务器名称和资源服务器标识符。对于您在资源服务器中创建的每个范围,您都必须提供范围名称和描述。

例如:

  • Name:资源服务器的友好名称,如 Weather APIPhoto API

  • Identifier:资源服务器的唯一标识符。这可能是您的资源服务器所在的 HTTPS 终端节点。例如,https://my-weather-api.example.com

  • Scope Name:范围名称。例如,weather.read

  • Scope Description:范围的简要说明。例如:Retrieve weather information

当客户端应用程序在任一 OAuth2.0 流中请求自定义范围时,它必须请求范围的完整标识符,即 resourceServerIdentifier/scopeName。例如,如果资源服务器标识符是 https://myphotosapi.example.com,范围名称是 photos.read,则客户端应用程序必须在运行时请求 https://myphotosapi.example.com/photos.read

从资源服务器中删除一个范围不会删除其与所有客户端的关联;删除范围只会使其处于非活动状态。因此,如果客户端应用程序在运行时请求已删除的范围,则该范围将被忽略,并且不会包含在访问令牌中。如果之后重新添加了该范围,它将会再次包含在访问令牌中。

如果从客户端中删除了某个范围,则会删除客户端与范围之间的关联。如果客户端在运行时请求了不允许使用的范围,则会导致错误并且不会颁发访问令牌。

您可以使用 AWS 管理控制台、API 和 CLI 为您的用户池定义资源服务器和范围。

为您的用户池定义资源服务器 (AWS 管理控制台)

您可以使用 AWS 管理控制台为您的用户池定义资源服务器。

定义资源服务器

  1. 登录 Amazon Cognito 控制台

  2. 在导航窗格中,选择 Manage your User Pools,然后选择要编辑的用户池。

  3. 选择 Resource servers 选项卡。

  4. 选择 Add a resource server

  5. 输入您的资源服务器的名称 (例如,Photo Server)。

  6. 输入您的资源服务器的标识符 (例如,com.example.photos)。

  7. 输入您的资源的自定义范围的名称,例如 readwrite

  8. 对于每个范围名称,输入一个描述,如 view your photosupdate your photos

  9. 选择 Save changes

您定义的每个自定义范围都将显示在 App client settings 选项卡的 OAuth2.0 Allowed Custom Scopes 下面,例如 com.example.photos/read

为您的用户池定义资源服务器 (AWS CLI 和 AWS API)

使用以下命令可为您的用户池指定资源服务器设置。

创建资源服务器

获取有关您的资源服务器设置的信息

列出用户池的所有资源服务器的相关信息

删除资源服务器

更新资源服务器的设置