配置授权
本指南将介绍如何配置 Keycloak Authorization Services,以使用细粒度策略保护资源。有关背景概念,请参阅 授权服务。
目录
前提条件第 1 步:定义资源第 2 步:定义 Scopes第 3 步:创建策略创建基于角色的策略创建基于组的策略创建基于时间的策略创建基于用户的策略创建聚合策略第 4 步:创建权限创建基于资源的权限创建基于 Scope 的权限第 5 步:测试策略从你的应用获取授权请求 Requesting Party Token (RPT)对 RPT 进行 Introspect导出和导入前提条件
- 一个具有 confidential OIDC client 的 Keycloak Realm(请参阅 管理客户端)。
- 在客户端上启用 Authorization(客户端 Settings > Authorization 开关)。
第 1 步:定义资源
资源表示你的应用保护的实体。
- 在客户端的 Authorization 选项卡中,单击 Resources。
- 单击 Create resource。
- 配置:
- 单击 Save。
第 2 步:定义 Scopes
如果你需要除资源内联创建之外的其他 scopes:
- 单击 Authorization scopes。
- 单击 Create authorization scope。
- 输入 Name(例如,
approve)。 - 单击 Save。
第 3 步:创建策略
策略定义授予访问权限的条件。
创建基于角色的策略
- 单击 Policies > Create policy > Role。
- 输入 Name(例如,
Managers Only)。 - 添加所需的 realm 或 client 角色(例如,
manager)。 - 将 Logic 设置为
Positive(满足条件时授予)或Negative(满足时拒绝)。 - 单击 Save。
创建基于组的策略
- 单击 Create policy > Group。
- 输入 Name。
- 选择应具有访问权限的组。
- 启用 Extend to Children 以包含子组。
- 单击 Save。
创建基于时间的策略
- 单击 Create policy > Time。
- 配置时间窗口:
- Not Before / Not On or After — 日期范围。
- Day of Month / Month / Year — 日历约束。
- Hour / Minute — 每日时间约束。
- 单击 Save。
创建基于用户的策略
- 单击 Create policy > User。
- 选择应具有访问权限的特定用户。
- 单击 Save。
创建聚合策略
聚合策略使用决策策略将多个子策略组合在一起。
- 单击 Create policy > Aggregated。
- 输入 Name。
- 将 Decision Strategy 设置为
Unanimous、Affirmative或Consensus。 - 添加子策略。
- 单击 Save。
第 4 步:创建权限
权限将资源和 scopes 绑定到策略。
创建基于资源的权限
- 单击 Permissions > Create resource-based permission。
- 输入 Name(例如,
Document Access)。 - 选择此权限适用的 Resources。
- 选择要评估的 Policies。
- 设置用于组合策略结果的 Decision Strategy。
- 单击 Save。
创建基于 Scope 的权限
- 单击 Create scope-based permission。
- 输入 Name(例如,
Document Edit Permission)。 - 选择 Resources(可选 — 如果省略,则适用于所有资源)。
- 选择 Scopes(例如,
edit)。 - 选择 Policies。
- 单击 Save。
第 5 步:测试策略
在部署前,使用内置的策略评估工具测试你的授权配置。
- 单击 Authorization 部分中的 Evaluate 选项卡。
- 选择或创建一个测试用户。
- 选择客户端 scope 上下文。
- 添加要评估的资源和 scope 权限。
- 单击 Evaluate。
- 查看结果:
- PERMIT — 已授予访问权限。
- DENY — 已拒绝访问。
- 展开每个结果,查看哪些策略促成了该决策。
从你的应用获取授权
请求 Requesting Party Token (RPT)
响应包含一个 RPT(嵌入权限的访问令牌)。
对 RPT 进行 Introspect
响应包含一个 permissions 数组,其中列出了已授予的资源和 scopes。
导出和导入
Authorization 配置(resources、scopes、policies、permissions)可以导出为 JSON,以便进行版本控制或迁移:
- 在 Authorization 选项卡中,单击 Export settings。
- JSON 包含所有 resources、scopes、policies 和 permissions。
- 如需导入,请使用 Import 按钮,或在
KeycloakRealmImportCR 中的客户端定义里包含 Authorization 配置。