8.4.3. 管理权限请求
使用 UMA 协议的资源服务器可以使用特定的端点来管理权限请求。此端点提供了一个与 UMA 兼容的流,用于注册权限请求并获取一个权限票据。
http://${host}:${port}/realms/${realm-name}/authz/protection/permission
权限票据 是代表权限请求的特殊安全令牌类型。根据 UMA 规格,权限票据是:
关联处理从授权服务器到资源服务器,从资源服务器到客户端,最终从客户端重新发送到授权服务器,以便授权服务器评估正确的策略以应用到授权数据的请求。
在大多数情况下,您不需要直接处理此端点。Red Hat build of Keycloak 提供了一个 策略强制器,为资源服务器启用 UMA,以便它可以从授权服务器获取权限票据,将这个票据返回到客户端应用程序,并根据最终请求方令牌(RPT)强制执行授权决策。
从红帽构建的 Keycloak 获取权限票据的过程由资源服务器执行,而不是常规客户端应用程序,当客户端试图访问受保护的资源时获得权限票据,而无需必要授予访问该资源。使用 UMA 时,权限票据的颁发是允许资源服务器进行的重要方面:
- 从与资源服务器保护的资源关联的数据摘要
- 在 Red Hat build of Keycloak 授权请求中注册,稍后可以在工作流中使用它们来根据资源的所有者同意授予访问权限
- 将资源服务器与授权服务器分离,并允许它们使用不同的授权服务器保护和管理其资源
客户而言,权限票据也很重要的方面,需要强调:
- 客户端不需要了解授权数据如何与受保护的资源关联。对客户端的权限票据完全不透明。
- 客户端可以访问不同资源服务器上的资源,并由不同的授权服务器保护
这些只是 UMA 带来的一些好处,其中 UMA 的其他方面基于权限票据,特别关注隐私和用户对其资源的控制访问权限。
8.4.3.1. 创建权限票据 复制链接链接已复制到粘贴板!
要创建权限票据,请发送 HTTP POST 请求,如下所示:
curl -X POST \
http://${host}:${port}/realms/${realm-name}/authz/protection/permission \
-H 'Authorization: Bearer '$pat \
-H 'Content-Type: application/json' \
-d '[
{
"resource_id": "{resource_id}",
"resource_scopes": [
"view"
]
}
]'
在创建票据时,您还可以推送任意声明,并将这些声明与 ticket 关联:
curl -X POST \
http://${host}:${port}/realms/${realm-name}/authz/protection/permission \
-H 'Authorization: Bearer '$pat \
-H 'Content-Type: application/json' \
-d '[
{
"resource_id": "{resource_id}",
"resource_scopes": [
"view"
],
"claims": {
"organization": ["acme"]
}
}
]'
在评估与权限票据关联的资源和范围的权限时,策略可以使用这些声明。