跳到主要内容

处理组织令牌 (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) 更新后自动重定向回你的应用。