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 name | Property description | Required |
---|---|---|
API Name | 一个用户友好的名称,可以帮助你识别 API 资源。 | true |
API Identifier | 独特的 API 资源指示器 值,具有上述限制。 | |
Logto 将使用它来识别请求的 API 资源并相应地授予授权令牌。 | true | |
Token expiration time (in seconds) | 为 访问令牌 设置的过期时间。默认过期值为 3600。 | false |
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 详细信息页面管理或删除它。