Keycloak服务授权
作者:互联网
概述
keycloak支持细粒度的授权策略,并且可以和不同的访问控制机制结合,比如:
- 基于属性的访问控制 ABAC
- 基于角色的访问控制 RBAC
- 基于用户的访问控制 UBAC
- 基于上下文的访问控制 CBAC
- 基于规则的访问控制
- 基于时间的访问控制
- 通过策略服务的SPI自定义访问控制策略
keycloak通过一组管理界面和RESTful接口提供创建权限的必要方法,这些权限用户保护资源和作用域,把权限和鉴权策略绑定,就可以在应用或服务中执行鉴权。
资源服务器(应用或者服务)通常会基于一些信息来决定使用允许对受保护资源的访问。对于RESTful服务而言,这些信息一般是从安全令牌中获得的,而安全令牌是由请求通过bearer token携带的。对于基于会话的网络服务而言,这些信息通常存放在用户会话中,每次请求都需要检索这些信息。
通常,资源服务器会采用基与角色的访问控制策略。当用户试图访问受保护资源时,服务器会检查用户的角色是否允许访问请求的资源。但是这一策略有一些缺点:
- 资源和角色紧密关联,所以角色的变动(比如增加、删除、修改访问上下文)会影响很多资源
- 安全要求变化时可能需要深度修改代码
- 如果应用规模过大,角色管理可能会变得复杂且容易出错
- 基于角色的访问控制不是最灵活的机制。角色并不能代表用户的真实身份、且缺少上下文信息。被授予角色后,总会有一些访问权限。
假如我们的应用需要服务多样的场景,我们的用户散布在不用的地区,每个地区都有各自的政策,用户也使用不同的设备,同是也有较高的信息共享需求。keycloak的服务授权通过以下方法可以帮助我们提升授权的能力。
- 使用细粒度的授权策略和不同的访问控制机制保护资源
- 中心化的资源、权限和策略管理
- 中心化的策略定义点
- 基于一些列的REST授权服务的REST安全
- 授权工作流和用户管理访问
- 可以避免代码重复的基础设施和对安全需求变化快速适配
架构
从设计角度来看,授权服务基于一组定义良好的授权模式,提供以下功能:
- 策略管理点 PAP
提供用户界面用于管理资源服务器、资源范围、权限和策略。部分功能通过Protection API远程实现 - 策略决策点 PDP
提供一个分布式的策略决策点,向其发送授权请求,并根据请求的权限相应地评估策略。 - 策略执行点 PEP
提供不同环境的实现,以在资源服务器端实际执行授权决策。keycloak提供了一些内置的策略执行器 - 策略信息点 PIP
在评估授权策略期间,可以从标识和运行时环境中获取属性。
鉴权过程
三个主要流程定义了理解使用Keycloak对应用程序进行细粒度授权的必要步骤:
- 资源管理
- 权限和策略管理
- 策略执行
资源管理
资源管理过程中可以定义需要被保护的资源
首先,指明需要保护的对象,通常是一个网络应用或一组服务。
资源服务器通过keycloak控制台管理。任何注册的客户端都可以作为资源服务器并开启管理资源和作用域。
资源可以是一个网页、一个RESTFul资源、文件系统容中的文件、EJB等。既可以是一组资源也可以是某个特定的资源。
资源可以通过keycloak管理界面管理,也可以通过Protection API管理。使用后者,资源服务器可以远程管理他们的资源。
作用域一般代表可以对某种资源执行的操作,但是并不限于操作。也可以表示资源的属性。
权限和策略管理
定义完资源服务器和要保护的资源后,就需要设置权限和策略。
此过程包括定义管理资源的安全性和访问要求的所有步骤。
策略定义了对某些内容(资源或范围)访问或执行操作所必须满足的条件,但策略与其所保护的内容无关。策略是通用的,可以重用以生成权限或更复杂的策略。
定义完策略就可以定义权限,权限和权限保护的资源绑定。你需要指定要保护的资源或作用域,然后定义授予或拒绝权限的策略。
策略执行
策略实施涉及到对资源服务器实际实施授权决策的必要步骤。这是通过在能够与授权服务器通信的资源服务器上启用策略实施点来实现的。根据服务器返回的决定和权限请求授权数据,控制对受保护资源的访问。
鉴权服务
鉴权服务包括如下RESTFul端点
- Token端点
- 资源管理端点
- 权限管理端点
每个服务都提供了一个特定的API,涵盖授权过程中涉及的不同步骤。
token端点
OAuth2客户端(比如前端服务)可以使用token端点获取访问令牌,然后使用这一令牌访问资源服务器(后台服务)中的资源。以同样的方式,KeyClope授权服务提供对OAuth2的扩展,以允许基于与所请求的资源或范围相关联的所有策略的处理来发布访问令牌。这意味着资源服务器可以根据服务器授予的权限和访问令牌持有的权限管理对受保护的资源的访问。在KeyCloak授权服务中,具有权限的访问令牌称为请求方令牌或简称RPT。
protection API
protection API是方便资源服务器管理他们资源、作用域以及相关策略的端点。只有资源服务器可以访问这些API,访问这些API需要uma_protection作用域。
Protection API提供的操作包括如下两个类别:
- 资源管理
- 创建资源
- 删除资源
- 通过id查找
- 检索
- 权限管理
- 发布权限票据
当使用
标签:服务,策略,访问,服务器,授权,权限,资源,Keycloak 来源: https://blog.csdn.net/JosephThatwho/article/details/120530609