8.3. 用户管理的访问


红帽构建的 Keycloak 授权服务基于用户管理的访问或 UMA。UMA 是一个以以下方式增强 OAuth2 功能的规格:

  • 隐私性

    现在,用户隐私会变得很大的问题,因为更多的数据和设备可用并连接到云。通过 UMA 和红帽构建的 Keycloak,资源服务器可以增强其功能,以改进其资源如何保护用户隐私,其中根据用户定义的策略授予权限。

  • 第三方授权

    资源所有者(例如,常规最终用户)可以管理对资源的访问,并授权其他方(如常规最终用户)来访问这些资源。这与 OAuth2 不同,其同意代表一个用户,UMA 资源所有者能够以完全异步的方式同意对其他用户的访问。

  • 资源共享

    资源所有者允许管理其资源的权限,并决定谁可以访问特定资源以及如何。然后,红帽构建的 Keycloak 可以充当共享管理服务,以供资源所有者管理其资源。

红帽构建的 Keycloak 是一个与 UMA 2.0 兼容的授权服务器,可提供大多数 UMA 功能。

例如,假设用户 alice (资源所有者)使用互联网银行服务(资源服务器)来管理她的银行帐户(资源)。第一天,Alice 决定打开她的银行客户,到 Bob (请求方),是财务专家。但是,Bob 应该只具有查看(范围)AXX 帐户的权限。

作为资源服务器,互联网银行服务必须能够保护 alice 银行帐户。为此,它依赖于红帽构建的 Keycloak 资源注册端点,来在代表 alice 的 bank 帐户的服务器中创建一个资源。

目前,如果 Bob 试图访问 alice 的 bank 帐户,则拒绝访问。互联网银行服务为银行帐户定义了几个默认策略。其中之一就是,只有所有者(本例中为 alice)可以访问她的银行帐户。

但是,与 alice 的隐私相关的互联网银行服务也使她能够更改银行帐户的特定策略。她可以更改这些政策之一就是定义允许哪些人查看她的银行帐户。为此,互联网银行服务依赖于红帽构建的 Keycloak 来为 alice 提供空间,其中她可以选择允许其访问的个人和操作(或数据)。在任何时候,Alice 可以撤销访问权限,或向 bob 授予其他权限。

8.3.1. 授权过程

在 UMA 中,当客户端尝试访问 UMA 保护的资源服务器时,授权过程会启动。

UMA 保护的资源服务器需要请求中的 bearer 令牌,其中令牌是 RPT。当客户端请求资源没有 RPT 时:

客户端请求受保护的资源而无需发送 RPT

curl -X GET \
  http://${host}:${port}/my-resource-server/resource/1bfdfe78-a4e1-4c2d-b142-fc92b75b986f
Copy to Clipboard Toggle word wrap

资源服务器将响应发送回具有权限 票据 的客户端,以及一个 as_uri 参数,并将红帽构建的 Keycloak 服务器的位置发送到其中,以获取 RPT。

资源服务器使用权限票据响应

HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
    as_uri="https://${host}:${port}/realms/${realm}",
    ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
Copy to Clipboard Toggle word wrap

权限票据是红帽构建的 Keycloak 权限 API 发布的特殊令牌类型。它们代表正在请求的权限(如资源和范围),以及与请求关联的任何其他信息。只有资源服务器才能创建这些令牌。

现在,客户端有权限票据以及红帽构建的 Keycloak 服务器的位置,客户端可以使用发现文档来获取令牌端点的位置并发送授权请求。

客户端向令牌端点发送授权请求,以获取 RPT

curl -X POST \
  http://${host}:${port}/realms/${realm}/protocol/openid-connect/token \
  -H "Authorization: Bearer ${access_token}" \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "ticket=${permission_ticket}
Copy to Clipboard Toggle word wrap

如果红帽构建的 Keycloak 评估过程会导致权限无效,它会发出与权限关联的 RPT:

红帽构建的 Keycloak 使用 RPT 响应客户端

HTTP/1.1 200 OK
Content-Type: application/json
...
{
    "access_token": "${rpt}",
}
Copy to Clipboard Toggle word wrap

在使用某些其他授权类型时,服务器的响应与来自令牌端点的任何其他响应类似。RPT 可以从 access_token 响应参数获取。如果客户端没有授权红帽构建 Keycloak 的权限以 403 HTTP 状态代码进行响应:

红帽构建的 Keycloak 拒绝授权请求

HTTP/1.1 403 Forbidden
Content-Type: application/json
...
{
    "error": "access_denied",
    "error_description": "request_denied"
}
Copy to Clipboard Toggle word wrap

8.3.2. 提交权限请求

作为授权过程的一部分,客户端首先需要从 UMA 保护的资源服务器获取权限票据,以便在红帽构建的 Keycloak Token Endpoint 中与 RPT 进行交换。

默认情况下,红帽构建的 Keycloak 会以 403 HTTP 状态代码进行响应,并在无法通过 RPT 发布客户端时发出 request_denied 错误。

红帽构建的 Keycloak 拒绝授权请求

HTTP/1.1 403 Forbidden
Content-Type: application/json
...
{
    "error": "access_denied",
    "error_description": "request_denied"
}
Copy to Clipboard Toggle word wrap

这样的响应意味着红帽构建的 Keycloak 无法发布具有权限票据代表的 RPT。

在某些情况下,客户端应用程序可能希望启动异步授权流,并让请求的资源所有者决定是否应该授予访问权限。为此,客户端可以使用 commit _request 请求参数以及向令牌端点的授权请求:

curl -X POST \
  http://${host}:${port}/realms/${realm}/protocol/openid-connect/token \
  -H "Authorization: Bearer ${access_token}" \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "ticket=${permission_ticket} \
  --data "submit_request=true"
Copy to Clipboard Toggle word wrap

使用 commit_request 参数时,红帽构建的 Keycloak 会为访问被拒绝的每个资源保留一个权限请求。创建后,资源所有者可以检查其帐户并管理其权限请求。

您可以将此功能视为应用程序中的 Request Access 按钮,其中用户可以要求其他用户访问其资源。

8.3.3. 管理对用户资源的访问

用户可以使用红帽构建的 Keycloak 帐户控制台来管理对其资源的访问。要启用此功能,您必须首先为您的域启用用户管理的访问。

流程

  1. 登录 Admin 控制台。
  2. 单击菜单中的 Realm Settings
  3. 用户管理的访问切换为 ON
  4. 单击管理控制台右上角的用户名,再选择 Manage Account

    My Resources

  5. 在菜单选项中,单击 My Resources。此时会显示一个带有以下选项的页面。

    • 管理 我的资源

      本节包含由用户拥有的所有资源的列表。用户可以单击资源以获取更多详细信息,并与他人共享资源。当某个权限请求等待批准时,将在资源名称旁边放置一个图标。这些请求连接到请求访问特定资源的方(用户)。用户可以批准或拒绝这些请求。您可以通过点图标来完成此操作

      Resource Detail

    • 管理与我共享的资源

      本节包含与用户共享的所有资源的列表。

    • 通过访问此资源来管理人员

      本节包含有权访问此资源的人员的列表。允许用户通过单击 Revoke 按钮或删除特定的 权限 来撤销访问权限。

    • 与其它资源共享资源

      通过键入其他用户的用户名或电子邮件,用户可以共享该资源并选择希望授予访问权限的权限。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部