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 详细信息页面管理或删除它。