跳到主要内容

API 资源

API 资源,也称为 资源指示器,表示要请求的目标服务或资源,通常是表示资源身份的 URI 格式变量。这是 Logto 授权系统中的一个关键概念,因为它定义了授权策略旨在保护的端点。

资源指示器 (Resource indicator)

  • 资源值表示请求访问的目标服务或资源。
  • 其值 必须 是一个绝对 URI。
  • URI 不得 包含片段组件。
  • 不应 包含查询组件。
  • 应该 为其打算访问的完整 API 或资源集提供最具体的 URI。

在实践中,客户端可能知道要交互的应用程序或资源的基本 URI。将其用作资源参数的值是合适的。

例如,Logto Management API 基本 URI。

https://tenantId.logto.app/api

默认情况下,此 API 资源已预注册到你的 Logto 服务。此 URI 下的所有 Management API 都由 Logto 保护。

Logto API 资源架构

Property nameProperty descriptionRequired
API Name一个用户友好的名称,可以帮助你识别 API 资源。true
API Identifier独特的 API 资源指示器 值,具有上述限制。
Logto 将使用它来识别请求的 API 资源并相应地授予授权令牌。true
Token expiration time (in seconds)访问令牌 设置的过期时间。默认过期值为 3600false
Default API每个租户只能设置零个或一个默认 API。
当指定了默认 API 时,可以在认证请求中省略资源参数。后续的令牌交换将默认使用该 API 作为受众,从而导致 JWT 的签发。false
备注

请求过期的 访问令牌 应该受到限制。这是为了保护你的 API 不被滥用的令牌所实施的。设置的值越大,签发的 访问令牌 存活时间越长,你的 API 就越容易受到攻击。

默认 API

备注

此功能主要用于不支持 OIDC 资源指示器的应用程序,例如 ChatGPT 插件。

Logto 利用 RFC 8707: OAuth 2.0 的资源指示器 实现基于角色的访问控制 (RBAC)。虽然它是 OAuth 2.0 的功能之一,但尚未得到广泛支持。

在 Logto 的实现中,每个用户定义的权限 (Scope) 必须与一个 API 资源相关联。否则,它将被视为 OpenID Connect (或 OAuth) 权限。通常,这不会影响你的授权过程。然而,当与缺乏 RFC 8707 支持的第三方应用集成时(例如 ChatGPT 插件),可能会带来挑战,因为初始授权请求可能不包含 resource 参数。因此,Logto 将始终签发不透明访问令牌。

为了解决此问题,你可以将一个 API 资源指定为租户级别的默认资源。一旦完成:

  • 认证请求 中没有 resource 参数时,Logto 将使用默认 API 资源。
  • 如果包含 openid 权限,当后续 令牌请求 中没有 resource 参数时,将为 用户信息端点 签发不透明访问令牌。
  • 如果不包含 openid 权限,当后续 令牌请求 中没有 resource 参数时,将为默认 API 资源签发 JWT 访问令牌。

通过指定默认 API 资源,你可以确保与缺乏 RFC 8707 支持的应用程序的顺利集成,同时保持适当的访问控制。

在 Logto 中注册 API 资源

要从 Logto 获取受受众限制的 访问令牌,首先需要注册你的后端 API,以启用 Logto 的受受众限制的访问令牌。当收到授权请求时,Logto 将识别注册的 API 资源并相应地授予访问权限。

要注册你的 API,请导航到 Console > API resources 你将看到一个内置资源,其 API 标识符显示为 https://[your-tenant-id].logto.app/api。此资源涵盖 Logto 的所有 Management API,并确保它们仅对 Logto 的授权用户可访问。

点击 Create API resource 按钮,并按照交互式表单创建你自己的 API 资源:

  • 一个可读的 API 名称,可以更好地帮助你识别此实体。
  • 一个 URI 格式的唯一 API 标识符。它代表 API 资源的身份。

新创建的 API 将显示在列表中。你可以通过点击实体在 API 详细信息页面管理或删除它。