8.3. 用户管理的访问


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

  • 隐私性

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

  • 第三方授权

    资源所有者(如:常规最终用户)可以管理对其资源的访问,并授权其他方(如常规最终用户)访问这些资源。这与 OAuth2 不同,其中向代表用户的客户端应用程序提供了许可,而 UMA 资源所有者就可以完全异步访问其他用户。

  • 资源共享

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

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

例如,请考虑使用互联网服务器(资源服务器)来管理她帐户(资源)的用户 所有者(资源所有者)。一天,Aat 决定将她的政府机构帐户开放给公司(请求方)。但是,Chath 应该只能具有 view (范围)Ccier 的帐户的权限。

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

目前,如果 Ice 试图访问 站 账户,则拒绝访问。互联网银行服务为银行帐户定义了几个默认策略。其中之一是,只有所有者(在这个示例中是,Sutum)才可以访问她的帐户。

但是,与 Ice 隐私相关的互联网指导服务还允许她更改公司的特定策略。她可以更改的策略之一就是定义允许哪些人员查看她的帐户。为此,互联网银行服务依赖于红帽构建的 Keycloak 来为 alice 提供空间,其中她可以选择允许其访问的个人和操作(或数据)。随时可以撤销访问权限或授予其额外权限。

8.3.1. 授权过程

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

UMA 保护的资源服务器需要在令牌是 RPT 的请求中需要 bearer 令牌。当客户端在没有 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。

在某些情况下,客户端应用程序可能希望启动异步授权流,并让所请求资源的拥有者决定是否应授予访问权限。为此,客户端可以使用 submit_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. 登录管理控制台。
  2. 单击菜单中的 Realm Settings
  3. 用户管理的访问切换为 ON
  4. 单击管理控制台右上角的用户名,再选择 Manage Account

    My Resources

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

    • 管理 My 资源

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

      Resource Detail

    • 管理 与我共享的资源

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

    • 管理 有权访问此资源的人员

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

    • 将资源与其他共享

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat