keycloak入门了解

时间:2024-05-21 21:08:51

keycloak 是是一个开源软件,源码地址是:https://github.com/keycloak/keycloak/

Keycloak支持细粒度的授权策略,并且能够组合不同的访问控制机制,例如:

  • Attribute-based access control (ABAC): 基于属性的安全控制
  • Role-based access control (RBAC): 基于角色的安全控制
  • User-based access control (UBAC): 基于用户的安全控制
  • Context-based access control (CBAC): 基于上下文的安全控制
  • Rule-based access control: 基于规则的安全控制
    • 使用Javascript
    • 使用 JBoss Drools
  • Time-based access control: 基于时间的安全控制
  • 通过策略提供程序服务提供程序接口(SPI)支持自定义访问控制机制(ACMs)

Keycloak基于一组管理UI和RESTful API,为受保护资源和作用域创建权限,将这些权限与授权策略相关联以及在应用程序和服务中强制执行授权决策的必要方法。

资源服务器(为受保护资源提供服务的应用程序或服务)通常依赖某种信息来决定是否应该向受保护资源授予访问权限。
对于基于RESTful的资源服务器,该信息通常从安全令牌获取,通常在每次请求发送到服务器时作为承载令牌发送。
对于依赖会话对用户进行身份验证的Web应用程序,该信息通常存储在用户的会话中,并从那里为每个请求检索。

通常,资源服务器仅基于基于角色的访问控制(RBAC)执行授权决策,其中,针对映射到这些相同资源的角色检查授予尝试访问受保护资源的用户的角色。
虽然角色非常有用并且被应用程序使用,但它们也有一些限制:

  • 资源和角色紧密耦合,角色更改(例如添加,删除或更改访问上下文)可能会影响多个资源
  • 对安全性要求的更改可能意味着对应用程序代码进行深度更改以反映这些更改
  • 根据您的应用程序大小,角色管理可能变得困难且容易出错
  • 不是最灵活的访问控制机制。角色不能代表你是谁,缺乏上下文信息。如果您已被授予角色,则您至少拥有一些访问权限。

考虑到今天我们需要考虑用户分布在不同地区,不同本地策略,使用不同设备以及对信息共享的高需求的异构环境,Keycloak授权服务可以帮助您提高应用程序和服务的授权功能通过提供:

  • 使用细粒度授权策略和不同访问控制机制的资源保护
  • 资源,权限的策略的集中管理
  • 集中的策略决策点
  • 基于REST的授权服务的REST安全性
  • 授权工作流程和用户管理的访问权限
  • 有助于避免跨项目(并重新部署)代码复制并快速适应安全要求变化的基础架构

架构

keycloak入门了解
从设计角度来看,授权服务基于一组明确定义的授权模式,提供以下功能:

  • 策略管理点(Policy Administration Point/PAP)

    提供基于Keycloak管理控制台的一组UI,以管理资源服务器,资源,范围,权限和策略。部分内容也可以通过使用Protection API远程完成。

  • 策略决策点(PDP)

    提供可分发的策略决策点,指向发送授权请求的位置,并根据请求的权限相应地评估策略。有关更多信息,请参阅获取权限。

  • 策略执行点(PEP)

    提供不同环境的实现,以在资源服务器端实际执行授权决策。 Keycloak提供了一些内置的Policy Enforcer。

  • 策略信息点(PIP)

    基于Keycloak Authentication Server,可以从身份和运行时环境中获取属性。

核心概念:

users:用户是一个可以登陆系统的实体,它可以拥有联系它们自身的属性,例如邮箱、用户名、地址、电话号码或生日等,可以为user分配组别或者角色。

authentication:相当于密码,可以验证和识别一个user。

authorization:给予用户访问的过程。

credentials:证书,可以供keycloak验证用户的东西,例如密码、一次性密码、证书、指纹等。

roles:相当于用户的一个分类 ,一个组织可能有Admin\user\manager\emplee等角色,应用程序经常会分配权限给角色,而不是用户,因为用户太难管理。

user role mapping:定义了一个用户及角色的关系,一个用户可以属于零个或多个角色,用户与角色的映射关系,这样就可以决定用在各种资源访问的权限管理。

composite roles:复合角色可以包含其他的角色,用户拥有了复合角色就相当于拥有了它下面的所有子角色。

groups:组可以一组的用户,也可以将角色映射到角色中,用户可以成为组员后继承用组的角色

realms:领域,领域管理着一批,用户、证书、角色、组等,一个用户只能属于且能登陆到一个域,域之间是互相独立的,域只能管理在它下面的用户。

clients:客户端是一个实体,可以请求keycloak对用户进行身份验证,大部分情况下,客户端是应用或服务希望使用keycloak来保护自己和提供一个单点登录的解决方案。客户端也可以是一个实体,请求身份信息或一个访问信息,这样就可以调用其他keycloak保护的应用或服务了。