第 1 章 授权服务概述
红帽构建的 Keycloak 支持细粒度授权策略,并可组合不同的访问控制机制,例如:
- 基于属性的访问控制(ABAC)
- 基于角色的访问控制(RBAC)
- 基于用户的访问控制(UBAC)
- 基于上下文的访问控制(CBAC)
基于规则的访问控制
- 使用 JavaScript
- 基于时间的访问控制
- 通过服务提供商接口(SPI)支持自定义访问控制机制(ACM)
红帽构建的 Keycloak 基于一组管理 UI 和 RESTful API,并提供为受保护的资源和范围创建权限的必要方法,将这些权限与授权策略相关联,并在应用程序和服务中强制实施授权决策。
资源服务器(应用程序或服务受保护的资源)通常依赖某种类型的信息来决定是否应向受保护的资源授予访问权限。对于基于 RESTful 的资源服务器,该信息通常从安全令牌获得,通常作为 bearer 令牌发送到服务器。对于依赖会话验证用户的 Web 应用,该信息通常存储在用户会话中,并从那里检索到每个请求。
通常,资源服务器仅根据基于角色的访问控制(RBAC)执行授权决策,其中授予了试图访问保护资源的用户的角色会根据映射到这些相同资源的角色进行检查。虽然角色对应用程序非常有用且使用,但有一些限制:
- 资源和角色与角色紧密耦合,更改角色(如添加、删除或更改访问上下文)可能会影响多个资源
- 对安全要求的更改可能会简化应用程序代码的更改以反映这些更改
- 根据您的应用程序大小,角色管理可能会变得困难,并容易出错
- 这不是最灵活的访问控制机制。角色不表示您是谁且缺少上下文信息。如果您被授予了一个角色,则至少有一些访问权限。
考虑到目前,我们需要考虑在不同区域间分发用户的异构环境,使用不同的本地策略、使用不同的设备以及高需求信息共享,红帽构建的 Keycloak 授权服务可帮助您通过提供以下服务来帮助您提高应用程序和服务的授权功能:
- 使用细粒度授权策略和不同的访问控制机制进行资源保护
- 集中式资源、权限和策略管理
- 集中策略决策点
- 基于一组基于 REST 的授权服务进行 REST 安全性
- 授权工作流和用户管理的访问
- 有助于避免跨项目(和重新部署)的代码复制,并快速适应您的安全要求。
1.1. 架构
从设计的角度来看,授权服务基于一组精心定义的授权模式,提供以下功能:
策略管理点(PAP)
根据红帽构建的 Keycloak 管理控制台提供一组 UI,以管理资源服务器、资源、范围、权限和策略。这部分也可以通过使用 保护 API 远程完成。
策略决策点(PDP)
提供一个 distributable 策略决策,指向发送授权请求的位置,并使用请求的权限相应地评估策略。如需更多信息,请参阅 获取权限。
策略强制点(PEP)
为不同的环境提供实施,以便在资源服务器端实际实施授权决策。红帽构建的 Keycloak 提供了一些内置 策略 Enforcers。
策略信息点(PIP)
基于红帽构建的 Keycloak 身份验证服务器,您可以在评估授权策略的过程中从身份和运行时环境获取属性。
1.1.1. 授权过程
三个主要流程定义了了解如何使用红帽构建的 Keycloak 启用精细授权应用程序所需的步骤:
- 资源管理
- 权限和策略管理
- 策略强制
1.1.1.1. 资源管理
资源管理 涉及定义正在保护的内容的所有必要步骤。
首先,您需要指定您要保护的 Keycloak 的红帽构建,这通常代表 web 应用程序或一组一个或多个服务。有关资源服务器的更多信息,请参阅 术语。
资源服务器使用红帽构建的 Keycloak 管理控制台进行管理。您可以启用任何注册的客户端应用程序作为资源服务器,并开始管理您要保护的资源和范围。
资源可以是网页、RESTFul 资源、文件系统中的文件、EJB 等。它们可以表示一组资源(就像 Java 中的类),也可以代表单个和特定资源。
例如,您可能有一个代表所有 银行 帐户的银行帐户资源,并使用它来定义所有银行帐户通用的授权策略。但是,您可能希望为 alice 帐户 (属于客户的资源实例)定义特定策略,其中只有所有者才能访问某些信息或执行操作。
资源可以使用红帽构建的 Keycloak 管理控制台或 保护 API 进行管理。在后者的情况下,资源服务器能够远程管理其资源。
范围通常代表可以对资源执行的操作,但不仅限于它们。您还可以使用范围代表资源中的一个或多个属性。
1.1.1.2. 权限和策略管理
在定义了资源服务器以及要保护的所有资源后,您必须设置权限和策略。
这个过程涉及实际定义管理资源的安全性和访问要求所需的所有步骤。
策略定义必须满足访问或对某个资源(资源或范围)执行操作的条件,但它们不会与受保护的内容相关联。它们是通用的,可以被重新用于构建权限甚至更复杂的策略。
例如,要仅允许具有"用户高级"角色的用户访问一组资源,您可以使用 RBAC (基于角色的访问控制)。
红帽构建的 Keycloak 提供了几个内置策略类型(及其相应的策略供应商)涵盖了最常见的访问控制机制。您甚至可以根据使用 JavaScript 编写的规则创建策略。
定义了策略后,您可以开始定义您的权限。权限与它们保护的资源相结合。在这里,您可以指定您要保护的内容(资源或范围)以及必须满足授予或拒绝权限的策略。
1.1.1.3. 策略强制
策略强制 涉及为资源服务器实际实施授权决策所需的步骤。这可以通过在能够与授权服务器通信的资源服务器上启用 策略强制点 或 PEP 来实现,请求授权数据并根据服务器返回的决策和权限控制对受保护的资源的访问。
Red Hat build of Keycloak 提供一些内置策略强制实现,您可以根据应用程序运行的平台来保护应用程序。???
1.1.2. 授权服务
授权服务由以下 RESTFul 端点组成:
- 令牌端点
- 资源管理端点
- 权限管理端点
这些服务各自提供一个特定的 API,涵盖了授权过程中涉及的不同步骤。
1.1.2.1. 令牌端点
OAuth2 客户端(如前端应用)可以使用令牌端点从服务器获取访问令牌,并使用这些令牌来访问由资源服务器(如后端服务)保护的资源。同样,红帽构建的 Keycloak 授权服务为 OAuth2 提供扩展,以便根据处理与所请求的资源或范围关联的所有策略来发布访问令牌。这意味着资源服务器可以根据服务器授予的权限并由访问令牌来强制访问其受保护的资源。在 Red Hat build of Keycloak Authorization Services 中,带有权限的访问令牌被称为 Requesting Party Token 或 RPT。
其他资源
1.1.2.2. 保护 API
Protection API 是一组与 UMA 兼容的 端点,为资源服务器提供操作,以帮助它们管理其关联的资源、范围、权限和策略。只有资源服务器可以访问此 API,这还需要 uma_protection 范围。
保护 API 提供的操作可在两个主要组中组织:
资源管理
- 创建资源
- 删除资源
- 通过 Id 查找
- 查询
权限管理
- 问题权限标题
默认情况下启用远程资源管理。您可以使用红帽构建的 Keycloak 管理控制台更改,只允许通过控制台进行资源管理。
使用 UMA 协议时,保护 API 的权限 Tickets 是整个授权过程的重要部分。如后续小节中所述,它们代表客户端请求的权限,并发送到服务器,以获取在评估与所请求资源和范围相关联的权限和范围时授予的所有权限的最终令牌。
其他资源