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
curl -X GET \
http://${host}:${port}/my-resource-server/resource/1bfdfe78-a4e1-4c2d-b142-fc92b75b986f
资源服务器将响应发送回具有权限 票据
的客户端,以及一个 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"
HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
as_uri="https://${host}:${port}/realms/${realm}",
ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
权限票据是红帽构建的 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}
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}
如果红帽构建的 Keycloak 评估过程会导致权限无效,它会发出与权限关联的 RPT:
红帽构建的 Keycloak 使用 RPT 响应客户端
在使用其他授权类型时,服务器的响应就像来自令牌端点的任何其他响应一样。RPT 可以从 access_token
响应参数获取。如果客户端没有授权红帽构建 Keycloak 的权限以 403
HTTP 状态代码进行响应:
红帽构建的 Keycloak 拒绝授权请求
8.3.2. 提交权限请求 复制链接链接已复制到粘贴板!
作为授权过程的一部分,客户端首先需要从 UMA 保护的资源服务器获取权限票据,以便在红帽构建的 Keycloak Token Endpoint 中与 RPT 进行交换。
默认情况下,红帽构建的 Keycloak 会以 403
HTTP 状态代码进行响应,并在无法通过 RPT 发布客户端时发出 request_denied
错误。
红帽构建的 Keycloak 拒绝授权请求
这样的响应意味着红帽构建的 Keycloak 无法发布具有权限票据代表的 RPT。
在某些情况下,客户端应用程序可能希望启动异步授权流,并让所请求资源的拥有者决定是否应授予访问权限。为此,客户端可以使用 submit_request
请求参数以及令牌端点的授权请求:
使用 commit_request
参数时,红帽构建的 Keycloak 会为访问被拒绝的每个资源保留一个权限请求。创建后,资源所有者可以检查其帐户并管理其权限请求。
您可以将此功能视为应用程序中的 Request Access
按钮,用户可以在其中要求其他用户访问其资源。
8.3.3. 管理用户资源的访问 复制链接链接已复制到粘贴板!
用户可以使用红帽构建的 Keycloak 帐户控制台来管理对其资源的访问。要启用此功能,您必须首先为您的域启用用户管理的访问。
流程
- 登录管理控制台。
- 单击菜单中的 Realm Settings。
- 将 用户管理的访问切换为 ON。
单击管理控制台右上角的用户名,再选择 Manage Account。
在菜单选项中,单击 My Resources。此时会显示带有以下选项的页面:
管理 My 资源
本节包含由用户拥有的所有资源的列表。用户可以点资源以获取更多详细信息,并与其他资源共享资源。当有权限请求时,等待批准批准会在资源名称旁边放置图标。这些请求连接到请求对特定资源的访问方(用户)。用户可以批准或拒绝这些请求。您可以点击图标来完成此操作
管理 与我共享的资源
本节包含与用户共享的所有资源的列表。
管理 有权访问此资源的人员
本节包含有权访问此资源的人员的列表。用户可以通过单击
Revoke
按钮或删除特定的权限来撤销访问权限
。将资源与其他共享
通过输入其他用户的用户名或电子邮件,用户可以共享该资源并选择他们想要授予访问权限的权限。