8.3. 用户管理的访问
Red Hat Single Sign-On Authorization Services 基于用户管理的访问或 UMA (简称为 )UMA 是以以下方式增强了 OAuth2 功能的规格:
隐私性
现在,用户隐私已成为巨大的问题,因为更多的数据和设备可用并连接到云。借助 UMA 和红帽单点登录,资源服务器可以增强其功能,以改进根据用户定义的政策保护其资源保护。
第三方授权
资源所有者(例如:常规最终用户)可以管理对其资源的访问,授权其他方(例如:常规最终用户)以访问这些资源。这与 OAuth2 不同,如果代表用户为客户端应用程序授予权限,则允许 UMA 资源限制以完全异步方式访问其他用户。
资源共享
资源所有者可以管理其资源的权限,并决定谁可以访问特定资源以及如何。红帽单点登录可充当共享管理服务,资源所有者可从其中管理其资源。
Red Hat Single Sign-On 是一个兼容 UMA 2.0 的授权服务器,提供大多数 UMA 功能。
例如,请考虑使用互联网银行服务(资源服务器)来管理她银行帐户(资源服务器)的用户 Alice (资源所有者)。Alice Alice 决定开放她的银行账户给 Bob (请求方)是一个会计师。然而,Bob 应该只能访问查看(范围) Alice 的帐户。
作为资源服务器,互联网银行服务必须能够保护 Alice 的银行帐户。为此,它依赖于 Red Hat Single Sign-On Resource Registration Endpoint 在代表 Alice 银行帐户的服务器中创建资源。
目前,如果 Bob 尝试访问 Alice 银行帐户,则访问将被拒绝。互联网银行服务为银行帐户定义了几个默认策略。其中之一是,只有所有者(本例中为 Alice)被允许访问她银行帐户。
但是,针对 Alice 隐私权的 Internet 银行服务也允许她更改银行账户的特定政策。她可以改变的其中一个策略就是定义允许哪些人查看其银行帐户。为此,互联网银行服务依赖 Red Hat Single Sign-On 为 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
curl -X GET \
http://${host}:${port}/my-resource-server/resource/1bfdfe78-a4e1-4c2d-b142-fc92b75b986f
资源服务器使用权限 票据
和 as_uri
参数向客户端发送响应,使用 Red Hat Single Sign-On 服务器的位置将响应发送到该请求以获取 RPT。
资源服务器以权限票据响应
HTTP/1.1 401 Unauthorized WWW-Authenticate: UMA realm="${realm}", as_uri="https://${host}:${port}/auth/realms/${realm}", ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
as_uri="https://${host}:${port}/auth/realms/${realm}",
ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
权限票据是由 Red Hat Single Sign-On Permission API 发布的一种特殊令牌类型。它们表示所请求的权限(例如:资源和范围)以及与请求关联的任何其他信息。只有资源服务器被允许创建这些令牌。
现在客户端有权限票据以及 Red Hat Single Sign-On 服务器的位置,客户端可以使用发现文档来获取令牌端点的位置并发送授权请求。
客户端向令牌端点发送授权请求以获取 RPT
curl -X POST \ http://${host}:${port}/auth/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}/auth/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}
如果 Red Hat Single Sign-On 评估过程会产生权限,则发出 RPT 与其关联了权限:
Red Hat Single Sign-On 使用 RPT 响应客户端
服务器的响应与使用某些其他授权类型时来自令牌端点的任何其他响应一样。RPT 可以从 access_token
响应参数获取。如果客户端没有授权具有 Red Hat Single Sign-On 使用 403
HTTP 状态代码的权限:
Red Hat Single Sign-On 拒绝授权请求
8.3.2. 提交权限请求 复制链接链接已复制到粘贴板!
作为授权流程的一部分,客户端首先需要从 UMA 保护的资源服务器获取权限票据,以便在 Red Hat Single Sign-On Token Endpoint 中通过 RPT 对其进行交换。
默认情况下,Red Hat Single Sign-On 会响应 403
HTTP 状态代码和 request_denied
错误。如果客户端无法使用 RPT 发布。
Red Hat Single Sign-On 拒绝授权请求
此类响应表示 Red Hat Single Sign-On 无法发出 RPT,其权限由权限票据代表。
在某些情况下,客户端应用程序可能希望启动异步授权流,并让所请求的资源所有者决定是否应授予访问权限。为此,客户端可以使用 submit_request
请求参数以及到令牌端点的授权请求:
使用 commit _request
参数时,Red Hat Single Sign-On 将为访问被拒绝的每个资源保留权限请求。创建后,资源所有者可以检查其帐户并管理其权限请求。
您可以将此功能视为应用程序中的 Request Access
按钮,其中用户可以要求其他用户访问其资源。
8.3.3. 管理对用户资源的访问 复制链接链接已复制到粘贴板!
用户可以通过 Red Hat Single Sign-On 用户帐户服务来管理其资源的访问权限。要启用这个功能,您必须首先为您的域启用 User-Managed Access。
流程
- 登录 Admin 控制台。
- 点菜单中的 Realm Settings。
将 用户管理的访问权限切换为 ON。
在菜单选项中,单击 My Resources。此时将显示一个页面,其中包含以下选项:
管理 需要我的批准的Permission Requests
本节包含等待批准的所有权限请求的列表。这些请求与请求访问特定资源的各方(用户)连接。用户可以批准或拒绝这些请求。
管理 我的资源
本节包含由用户拥有的所有资源的列表。用户可以单击资源以获取更多详情并与他人共享资源。
管理 与我共享的资源
本节包含与用户共享的所有资源的列表。
管理等待批准的请求
本节包含等待其他用户或资源所有者批准的用户发送的权限请求列表。
当您点击特定资源以进行更改时,会显示以下页面:
本页提供以下选项:
管理对此资源的访问人员
本节包含有权访问此资源的人员的列表。用户可以通过单击 Revoke 按钮或删除特定权限来
撤销
访问权限
。与他人共享资源
通过输入其他用户的用户名或电子邮件,用户可以共享资源并选择想要授予访问权限的权限。