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。当客户端在没有权限 ticket 的情况下在资源服务器中请求资源时:
客户端在没有发送 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 拒绝授权请求