跳到主要内容

API 资源

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

资源指示器

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

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

例如,Logto Management API 的基本 URI。

https://tenantId.logto.app/api

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

Logto API 资源架构

属性名称属性描述必需
API 名称一个用户友好的名称,可以帮助你识别 API 资源。true
API 标识符独特的 API 资源指示器 值,具有上述限制。
Logto 将使用它来识别请求的 API 资源并相应地授予授权令牌。true
令牌过期时间 (以秒为单位)访问令牌 设置的过期时间。默认过期值为 3600false
默认 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) 权限。通常,这不会影响你的授权 (Authorization) 过程。然而,当与不支持 RFC 8707 的第三方应用集成时(例如,ChatGPT 插件),可能会带来挑战,因为初始授权 (Authorization) 请求可能不包含 resource 参数。因此,Logto 将始终发放不透明访问令牌。

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

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

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

在 Logto 中注册 API 资源

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

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

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

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

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

相关资源

不透明令牌与 JWT 我应该何时使用 JWT? API 授权 (Authorization) 方法