授权服务
Keycloak 基于 User-Managed Access (UMA) 规范和功能丰富的策略评估引擎,提供细粒度授权服务。这些服务超越了基于角色的访问控制(RBAC),支持基于属性、基于时间以及具备上下文感知的授权决策。
概述
传统的 RBAC 会将角色分配给用户,并在应用代码中检查角色。Keycloak Authorization Services 将授权逻辑从应用外部化到集中式策略引擎中:
- 原生应用 注册其受保护的资源和作用域。
- 管理员 定义控制这些资源访问的策略。
- Keycloak 在运行时评估策略并返回授权决策。
- 原生应用 使用授权响应执行这些决策。
这种分离方式使授权逻辑可以集中管理,而无需更改应用代码。
关键概念
策略类型
Keycloak 支持多种可组合的策略类型:
决策策略
当某个权限引用多个策略时,决策策略决定如何组合各个单独的策略决策:
授权流程
- 客户端应用向 Keycloak 请求访问令牌。
- 客户端将访问令牌发送到资源服务器(API)。
- 资源服务器向 Keycloak token endpoint 请求 RPT,并指定正在访问的资源和 scope。
- Keycloak 评估所有适用的策略,并返回一个包含已授予权限的 RPT(或拒绝该请求)。
- 资源服务器检查 RPT 权限,并允许或拒绝该操作。
另外,资源服务器也可以调用 token introspection endpoint 来评估权限,而无需获取 RPT。
启用授权服务
授权服务按客户端启用:
- 在 Admin Console 中,进入 Clients 并选择目标客户端。
- 启用 Client authentication(该客户端必须是 confidential)。
- 启用 Authorization。
- 单击 Save。
- 会出现一个新的 Authorization 选项卡,其中包含 resources、scopes、policies 和 permissions 的子部分。
有关分步配置,请参阅 Configure Authorization。
User-Managed Access (UMA)
UMA 扩展了授权模型,使 resource owners(终端用户)能够管理对其自身资源的访问。使用 UMA:
- 用户可以与其他用户或组共享资源。
- 用户可以批准或拒绝访问请求。
- 授权决策会遵循资源所有者的策略。
UMA 是一项高级功能,主要用于终端用户需要对资源共享进行细粒度控制的场景(例如文档共享、API 访问委托)。