8.4.4. 使用 Policy API 管理资源权限


Red Hat build of Keycloak 利用 UMA Protection API 来允许资源服务器为其用户管理权限。除了 Resource 和 Permission API 外,红帽构建的 Keycloak 还提供了一个 Policy API,其中可通过资源服务器代表其用户将权限设置为资源。

Policy API 位于:

http://${host}:${port}/realms/${realm-name}/authz/protection/uma-policy/{resource_id}

此 API 由 bearer 令牌保护,该令牌必须代表用户对资源服务器授予的同意,才能代表其代表其管理权限。bearer 令牌可以是从令牌端点获取的常规访问令牌:

  • 资源所有者密码凭证授予类型
  • 令牌交换,为使用者是资源服务器的令牌交换给某些客户端(公共客户端)的访问令牌

8.4.4.1. 将权限与资源关联

要将权限与特定资源关联,您必须发送 HTTP POST 请求,如下所示:

curl -X POST \
  http://localhost:8180/realms/photoz/authz/protection/uma-policy/{resource_id} \
  -H 'Authorization: Bearer '$access_token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
	"name": "Any people manager",
	"description": "Allow access to any people manager",
	"scopes": ["read"],
	"roles": ["people-manager"]
}'

在上例中,我们正在创建新权限并将其关联到由 resource_id 代表的资源,其中任何拥有角色 people-manager 的用户都应 授予读取 范围。

您还可以使用其他访问控制机制创建策略,比如使用组:

curl -X POST \
  http://localhost:8180/realms/photoz/authz/protection/uma-policy/{resource_id} \
  -H 'Authorization: Bearer '$access_token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
	"name": "Any people manager",
	"description": "Allow access to any people manager",
	"scopes": ["read"],
	"groups": ["/Managers/People Managers"]
}'

或者特定的客户端:

curl -X POST \
  http://localhost:8180/realms/photoz/authz/protection/uma-policy/{resource_id} \
  -H 'Authorization: Bearer '$access_token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
	"name": "Any people manager",
	"description": "Allow access to any people manager",
	"scopes": ["read"],
	"clients": ["my-client"]
}'

甚至使用 JavaScript 的自定义策略:

curl -X POST \
  http://localhost:8180/realms/photoz/authz/protection/uma-policy/{resource_id} \
  -H 'Authorization: Bearer '$access_token \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{
	"name": "Any people manager",
	"description": "Allow access to any people manager",
	"scopes": ["read"],
	"condition": "my-deployed-script.js"
}'

也可以设置这些访问控制机制的任意组合。

要更新现有权限,请发送 HTTP PUT 请求,如下所示:

curl -X PUT \
  http://localhost:8180/realms/photoz/authz/protection/uma-policy/{permission_id} \
  -H 'Authorization: Bearer '$access_token \
  -H 'Content-Type: application/json' \
  -d '{
    "id": "21eb3fed-02d7-4b5a-9102-29f3f09b6de2",
    "name": "Any people manager",
    "description": "Allow access to any people manager",
    "type": "uma",
    "scopes": [
        "album:view"
    ],
    "logic": "POSITIVE",
    "decisionStrategy": "UNANIMOUS",
    "owner": "7e22131a-aa57-4f5f-b1db-6e82babcd322",
    "roles": [
        "user"
    ]
}'
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部