跳到主要内容

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
令牌过期时间 (以秒为单位)为 访问令牌 设置的过期时间。默认过期值为 3600。false
默认 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) 方法