架构
从设计的角度来看,这是基于一套明确定义能提供这些功能的授权模式。
Policy Administration Point (PAP) 策略管理
提供基于Keycloak管理控制台的一组UI来管理资源服务器,资源,作用域,权限和策略。
这部分也可以通过使用Protection API也可以远程完成 其中的一部分。
Policy Decision Point (PDP) 决策点
提供可分发的策略决策点,以发送授权请求并根据请求的权限相应地评估策略。这部分也可以通过使用授权和授权API远程完成。
Policy Enforcement Point (PEP)策略执行点
提供不同环境的实现,以在资源服务器端实际执行授权决策。 Keycloak提供了一些内置的Policy Enforcer。
Policy Information Point (PIP)策略信息点
基于Keycloak认证服务器,在评估授权政策时可以从身份和运行时环境获取属性。
The Authorization Process授权流程
三个主要流程定义了必要的步骤来了解如何使用Keycloak来为您的应用程序启用细粒度的授权:
- Resource Management 资源管理
- Permission and Policy Management 权限和策略管理
- Policy Enforcement 策略执行
Resource Management 资源管理
资源管理涉及所有必要的步骤来定义被保护的内容。
首先,需要指定需要Keycloak保护什么,这通常表示Web应用程序或一组一个或多个服务。有关资源服务器的更多信息,请参阅术语。
资源服务器使用Keycloak管理控制台进行管理。在这里可以使任何注册的客户端应用程序作为资源服务器,并开始管理要保护的资源和作用域。
资源可以是网页,RESTFul资源,文件系统中的文件,EJB等。它们可以表示一组资源(就像Java中的Class一样),或者它们可以表示单个和特定的资源。
例如,您可能有一个银行帐户资源代表所有银行帐户,并使用它来定义所有银行账户通用的授权策略。但是,您可能需要为Alice帐户定义特定的策略(属于客户的资源实例),只允许所有者访问某些信息或执行操作。
资源可以使用Keycloak管理控制台或Protection API进行管理。在后一种情况下,资源服务器能够远程管理其资源。
范围通常表示可以对资源执行的操作,但不限于此。还可以使用范围来表示资源中的一个或多个属性。
Permission and Policy Management权限和策略管理
一旦定义了资源服务器和要保护的所有资源,就必须设置权限和策略。此过程涉及实际定义管理资源的安全性和访问要求的所有必要步骤。
策略定义访问或执行某些操作时必须满足的条件(资源或作用域),但他们并没有束缚于他们所保护的东西.它们是通用的,可以重用以构建权限或更复杂的策略.
例如,为了允许仅对授予角色“User Premium”的用户访问一组资源,您可以使用RBAC(基于角色的访问控制)。Keycloak提供了一些内置的策略类型(及其各自的策略提供者),涵盖了最常见的访问控制机制。您甚至可以根据使用JavaScript或JBoss Drools编写的规则来创建策略.
一旦定义策略后,就可以开始定义权限。权限与他们正在保护的资源相结合。您可以在此指定要保护的内容(资源或作用域)以及授予或拒绝许可必须满足的策略。
Policy Enforcement策略执行
策略执行涉及到向资源服务器实际执行授权决策的必要步骤。这是通过启用策略执行点来实现的或者由能够与授权服务器进行通信的资源服务器上的PEP请求授权数据和基于服务器返回的决策和权限的控制访问来保护资源。
Keycloak提供了一些内置的Policy Enforcer实现,您可以根据运行的平台来保护应用程序。
Authorization Services授权服务
授权服务由以下RESTFul API组成:
Protection API 保护API
Authorization API 授权API
Entitlement API
这些服务中的每一个提供了一个特定的API,涵盖了授权过程中涉及的不同步骤。
Protection API 保护API
Protection API是符合UMA标准的端点,为资源服务器提供一小组操作,以帮助他们管理其资源和作用域。只允许资源服务器访问这个API,这也需要一个uma_protection范围。
Protection API提供的操作可以组织在两个主要组中:
Resource Management 资源管理器
Create Resource 创建资源
Delete Resource 删除资源
Find by Id 根据id查找资源
Find All 查找所有资源
Find with filters (for example, search by name, type, or URI) 自定义查找资源
Permission Management 权限管理器
- Issue Permission Tickets
注意:默认情况下,启用远程资源管理。您可以使用Keycloak管理控制台进行更改,只允许通过控制台进行资源管理。
当使用UMA协议时,Protection API发布许可证是整个授权过程的重要组成部分。如后续部分所述,它们表示客户端请求的权限,并将其发送到服务器以获取最终令牌,并在与请求的资源和范围相关联的权限和策略的评估期间授予所有权限。
有关详细信息,请参阅Protection API 。
Authorization API 授权API
授权API也是提供单一操作的符合UMA的端点。这个API使用请求方令牌交换一个访问令牌和许可证。
RPT包含授予客户端的所有权限,可用于调用资源服务器以访问其受保护的资源。
当请求RPT时,您还可以提供以前发布的RPT。在这种情况下,所产生的RPT将包含来自先前的RPT的权限和许可证中的新权限的并集。
有关详细信息,请参阅授权API。
Entitlement API授权API
Entitlement API提供了一条单脚协议来发布RPT。与Authorization API 不同,Entitlement API只需要一个访问令牌。
从此API可以获取用户的所有权利或权限(基于给定资源服务器管理的资源),或仅获取一组或多个资源的权限。