为您的用户池定义资源服务器 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

在为用户群体配置域后,Amazon Cognito 会自动预置一个托管 Web UI,其中包含您的应用程序可提供给用户的注册页和登录页。有关更多信息,请参阅 第 2 步 添加应用程序客户端并设置托管 UI

资源服务器OAuth 2.0 API 服务器。为了保护访问受保护的资源,它会验证您的应用程序的访问令牌并授权访问您的 API。它根据令牌签名验证颁发者,根据令牌到期时间验证有效性,并根据令牌声明中的范围验证访问级别。

资源服务器 API 可能会授予对数据库中信息的访问权限,或者控制您的 IT 资源。Amazon Cognito 访问令牌可以授权访问支持 OAuth 2.0 的 API。Amazon API Gateway REST API 具有对使用 Amazon Cognito 访问令牌进行授权的内置支持。应用程序会将 API 调用中的访问令牌传递到资源服务器。当应用程序在访问请求中传递令牌时,它应该将访问令牌视为不透明的。资源服务器将检查访问令牌以确定是否应授予访问权限。

注意

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

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

概述

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


            资源服务器流程概述。客户端请求具有自定义范围的授予,用户群体返回具有自定义范围的访问令牌,然后客户端向 API 提供访问令牌。

要获得具有自定义范围的访问令牌,您的应用程序必须向 令牌端点发出请求以兑换授权代码或请求客户端凭证授予。在托管 UI 中,您还可以通过隐式授予在访问令牌中请求自定义范围。

注意

由于它们是为人机交互式身份验证而设计的,InitiateAuthAdminInitiateAuth 请求生成不包含任何自定义范围的访问令牌。

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

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

示例:

  • 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

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

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

您可以使用 Amazon Web Services Management Console、API 或 CLI 为您的用户池定义资源服务器和范围。

为您的用户池定义资源服务器(Amazon Web Services Management Console)

您可以使用 Amazon Web Services Management Console为您的用户池定义资源服务器。

Original console

定义资源服务器

  1. 登录 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

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

  3. 选择资源服务器选项卡。

  4. 选择 Add a resource server(添加资源服务器)。

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

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

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

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

  9. 选择保存更改

您定义的每个自定义范围都将显示在 App client settings(应用程序客户端设置)选项卡的 OAuth2.0 Allowed Custom Scopes(OAuth2.0 允许的自定义范围)下面;例如 com.example.photos/read

New console

定义资源服务器

  1. 登录 Amazon Cognito 控制台

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

  3. 选择 App integration(应用程序集成)选项卡,然后查找 Resource servers(资源服务器)。

  4. 选择 Create a resource server(创建资源服务器)。

  5. 输入 Resource server name(资源服务器名称)。例如:Photo Server

  6. 输入 Resource server identifier(资源服务器识符)。例如:com.example.photos

  7. 输入您的资源的 Custom scopes(自定义范围),例如 readwrite

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

  9. 选择 Create (创建)

您的自定义范围可以在 App integration(应用程序集成)选项卡中进行审查,该选项卡位于 Custom scopes(自定义范围)列中的 Resource servers(资源服务)下。可以使用 App integration(应用程序集成)选项卡为应用程序客户端启用自定义范围,该选项卡位于 App clients(应用程序客户端)下。选择应用程序客户端,查找 Hosted UI settings(托管 UI 设置),然后选择 Edit(编辑)。添加 Custom scopes(自定义范围),然后选择 Save changes(保存更改)。

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

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

创建资源服务器

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

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

删除资源服务器

更新资源服务器的设置