跳到主要内容

处理组织令牌 (Organization token) 中的权限 (Scope) 更新

通过上述设置,你可以通过电子邮件发送邀请,受邀者可以以分配的角色加入组织 (Organization)。

拥有不同组织 (Organization) 角色的用户将在其组织令牌 (Organization token) 中拥有不同的权限 (Scopes)。你的客户端应用和后端服务都应检查这些权限 (Scopes),以确定可见功能和允许的操作。

如前所述,组织模板是保护组织权限 (Organization permissions)组织级 API 资源 (Organization-level APIs)的关键访问控制层。请务必查阅授权 (Authorization) 相关章节,并选择最适合你产品的授权 (Authorization) 模型。

本章重点介绍 权限 (Permission) 管理 以及在 Logto 组织令牌 (Organization token) 中处理权限 (Scope) 变更和权限 (Permission) 的最佳实践

处理组织令牌 (Organization token) 中的权限 (Scope) 更新

管理组织令牌 (Organization token) 中的权限 (Scope) 更新包括:

撤销已有权限 (Revoke existing scopes)

例如,将管理员降级为非管理员成员时,应移除该用户的权限 (Scopes)。此时,清除缓存的组织令牌 (Organization token),并使用刷新令牌 (Refresh token) 获取新的组织令牌 (Organization token)。新签发的组织令牌 (Organization token) 会立即反映减少后的权限 (Scopes)。

授予新权限 (Grant new scopes)

这可以分为两种情况:

授予已在认证 (Authentication) 系统中定义的新权限 (Grant new scopes that are already defined in your auth system)

与撤销权限 (Scopes) 类似,如果新授予的权限 (Scope) 已在认证 (Authentication) 服务器注册,签发新的组织令牌 (Organization token) 后,新权限 (Scopes) 会立即生效。

授予认证 (Authentication) 系统中新引入的新权限 (Grant new scopes that are newly introduced into your auth system)

此时,需要触发重新登录或重新授权流程,以更新用户的组织令牌 (Organization token)。例如,调用 Logto SDK 中的 signIn 方法。

实时检查权限 (Permission) 并更新组织令牌 (Organization token)

Logto 提供了 Management API 用于获取组织 (Organization) 中用户的实时权限 (Permission)。

  • GET /api/organizations/{id}/users/{userId}/scopes (API 参考)

将用户组织令牌 (Organization token) 中的权限 (Scopes) 与实时权限 (Permission) 进行对比,以判断用户是否被提升或降级。

  • 如果被降级,清除缓存的组织令牌 (Organization token),SDK 会自动签发包含更新权限 (Scopes) 的新组织令牌 (Organization token)。

    const { clearAccessToken } = useLogto();

    ...
    // 如果获取到的实时权限 (Scopes) 少于组织令牌 (Organization token) 中的权限 (Scopes)
    await clearAccessToken();

    这不需要重新登录或重新授权流程。Logto SDK 会自动签发新的组织令牌 (Organization token)。

  • 如果你的认证 (Authentication) 系统中引入了新的权限 (Scope),则需要触发重新登录或重新授权流程,以更新用户的组织令牌 (Organization token)。例如,使用 React SDK:

    const { clearAllTokens, signIn } = useLogto();

    ...
    // 如果获取到的实时权限 (Scopes) 比组织令牌 (Organization token) 中的权限 (Scopes) 多了新分配的权限 (Scopes)
    await clearAllTokens();
    signIn({
    redirectUri: '<your-sign-in-redirect-uri>',
    prompt: 'consent',
    });

    上述代码会触发跳转到用户授权页面 (Consent screen),并在用户组织令牌 (Organization token) 权限 (Scopes) 更新后自动重定向回你的应用。