应用级访问控制
应用级访问控制让你可以限制谁可以登录到特定应用程序。你无需让 Logto 租户中的每个注册用户都能访问每个应用,而是可以为每个应用基于用户、用户角色、组织或组织角色创建允许规则。
当你希望:
- 仅让员工或管理员访问内部应用时。
- 将受保护应用限制给特定用户组时。
- 只允许特定客户或合作伙伴访问第三方 OIDC / OAuth 应用时。
- 在向所有人开放前,先向试点组推出新应用时。
可以使用应用级访问控制。
工作原理
当应用级访问控制被禁用时,你的 Logto 租户中的所有注册用户都可以登录该应用程序。
当它被启用时,只有匹配至少一个已配置规则的用户才能访问该应用。如果用户未匹配任何规则,Logto 会拒绝登录尝试,并在应用收到令牌前显示访问被拒绝页面。
应用级访问控制会在授权 (Authorization) 流程和令牌续期时进行评估。这意味着:
- 没有访问权限的用户会在完成应用登录前被拦截。
- 当使用刷新令牌请求新令牌时,会再次检查现有的应用授权。
- 更新规则会影响后续的授权 (Authorization) 和令牌续期检查,但不会改变用户的全局 Logto 会话。
应用级访问控制与基于角色的访问控制 (RBAC)是分开的。RBAC 通过在访问令牌中发放权限 (scopes) 控制用户在认证 (Authentication) 后可以做什么。应用级访问控制则控制用户是否可以访问某个特定应用。
规则类型
你可以配置以下允许规则:
| 规则类型 | 允许内容 |
|---|---|
| 用户 | 指定用户可以访问该应用。 |
| 用户角色 | 被分配到选定用户角色的用户可以访问该应用。 |
| 组织 (Organizations) | 选定组织的所有当前和未来成员都可以访问该应用。 |
| 组织角色 | 在选定组织中拥有选定组织角色的成员可以访问该应用。 |
规则是叠加的。用户只需匹配其中一条规则即可访问应用。
例如,如果一个应用同时有“支持团队”用户角色规则和“BigTree - Admin”组织角色规则,那么只要用户被分配了支持团队角色,或在 BigTree 组织中是 Admin,就可以访问该应用。
配置应用级访问控制
- 前往 控制台 > 应用程序。
- 打开你想要限制的应用程序。
- 切换到 规则 标签页。
- 在 自定义允许规则 中,点击 添加规则。
- 选择规则类型:
- 用户
- 用户角色
- 组织 (Organizations)
- 组织角色
- 选择应被允许访问该应用的用户、角色、组织或组织角色。
- 打开 启用访问控制。
- 点击 保存更改。
你必须在启用访问控制前至少配置一条允许规则。这可以防止意外启用访问控制却没有任何用户可以访问应用。
编辑或移除规则
你可以在应用的 规则 标签页更新允许列表。
- 若要添加更多规则,点击规则表下方的 添加另一个。
- 若要移除规则,点击规则行上的删除按钮并确认操作。
- 添加或移除规则后,点击 保存更改 以应用更新。
如果已启用访问控制,Logto 要求至少保留一条规则。若要移除所有规则,请先关闭 启用访问控制,然后保存更改。
规则变更对用户的影响
应用级访问控制不会终止用户的全局 Logto 会话。用户可能仍然登录着 Logto 及其他应用。
对于被限制的应用:
- 不再匹配任何允许规则的用户,在下次经过该应用授权 (Authorization) 流程时会被拦截。
- 如果用户已有与应用相关的授权 (Authorization),当应用使用刷新令牌请求新令牌时,Logto 会再次检查规则。如果用户已无访问权限,Logto 会拒绝令牌请求。
这样可以让访问决策与应用绑定,同时避免对无关应用造成不必要的干扰。
与第三方应用权限的关系
对于第三方应用,应用级访问控制和权限管理解决的是不同的问题:
- 应用级访问控制 决定用户是否被允许登录第三方应用。
- 权限管理 决定第三方应用在用户授权页面上可以请求哪些用户资料权限 (scopes)、API 资源权限 (scopes) 和组织权限 (scopes)。
如果两者都已配置,用户必须先通过应用级访问控制,才能授权第三方应用。
与受保护应用的关系
对于受保护应用,应用级访问控制限制谁可以通过 Logto 认证 (Authentication) 层并访问受保护的源服务器。
受保护应用的认证 (Authentication) 规则仍然决定哪些路由需要认证 (Authentication)。应用级访问控制决定哪些已认证 (Authentication) 的 Logto 用户可以访问受保护应用。
最佳实践
- 尽量从用户角色或组织角色规则开始。它们比维护长用户列表更容易管理。
- 当组织内所有成员都应访问应用时,使用组织规则。
- 当只有组织内特定成员应访问应用时,使用组织角色规则。
- 当用户变更角色、加入或离开组织时,及时检查访问规则。
- 在你的思维模型中,将 RBAC 权限 (Permissions) 和应用级访问控制分开:应用级访问控制回答“这个用户能否访问这个应用?”,而 RBAC 回答“这个用户访问 API 或组织功能后能做什么?”