初始ReadHat开源的认证授权管理平台 - Keycloak

上一篇 文章简单介绍了 Keycloak ,反响不错。看来大家都对这个东西感兴趣,今天就来进一步的体验 Keycloak ,让我们对它有一个直观的认识,然后逐步深入,把它的设计理念和概念各个击破。

总体思路

因为事先已经知道 Keycloak 提供了 Spring Security 的适配器。先独立把 Keycloak 的核心概念弄清楚,然后再去研究它如何结合 Spring Security 的。

安装Keycloak

本文的 Keycloak 版本为 14.0.0

我向来不喜欢在安装上浪费时间,研究阶段能用Docker来安装是最省心的:

docker run -d -p 8011:8080 --name keycloak-server  -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak

执行上述命令安装 Keycloak ,成功后打开 http://localhost:8011/auth/admin 输入账号 admin 和密码 admin ,就进入了管理控制台。如果你感觉英文不爽可以根据下图改成中文:

中文界面的修改

改完之后你随便点点栏目了解一下,想象一下它们各自的功能和作用,这时候你要放轻松点不用想的太深就是了解一下全貌。

Realm

如果你接触过知名安全框架 Shiro 相信对这个概念不会陌生。 realm 是管理用户和对应应用的空间,有点租户的味道,可以让不同 realm 之间保持逻辑隔离的能力。

默认情况下, Keycloack 提供了一个叫 Masterrealm ,这个 Master 不承担具体应用和用户的管理,它只用来管理其它 realm 的生命周期。

Master域的管理职能示意图

登入 Masterrealm 创建一个自定义域 felord.cn

创建自定义域

User

User 是能够登录到应用系统的实体,其实可以理解为 账户 。他们可以拥有与自己相关的属性,例如电子邮件、用户名、地址、电话号码和生日。可以为他们分配组成员身份并为其分配特定的角色。 Keycloak 中的 User 都有他们从属的 realm 。接下来在我上面的自定义域 felord.cn 中新建一个用户,步骤为:

  • 菜单栏找到 管理->用户 ,然后打开 添加用户
  • 键入唯一的必填项 用户名(username)
  • 开启( ON )邮件认证( Email Verified ),然后保存。
  • 点击 凭据(Credentials) 选项卡为新用户设置临时密码。此密码是临时的,用户将需要在第一次登录时更改它。如果您更喜欢创建永久密码,请将 临时 开关切换到 关闭 并单击 设置密码

然后注销当前用户 admin 并到 http://localhost:8011/auth/realms/felord.cn/account 以刚创建的用户 felord 的身份登录到 felord.cn 域。

有没有发现登录链接的特点?

到这里一个创建 realm 和账户的流程就熟悉完了,不过我相信大多数同学看到这里还是懵逼的。怎么就手动了呢?不要急后面会结合代码来实现上述的流程以及更加符合应用场景的流程。

Keycloak的核心概念

接下来是我们在使用 Keycloak 时需要掌握的一些概念,上面已经提到了 realmuser ,这里就不再赘述了

authentication

识别和验证用户的过程。证明“你说的这个你就是你”。

authorization

授予用户访问权限的过程。标明“你可以干什么、不可以干什么”。

credentials

证明用户身份的凭证。可能是密码、一次性密码、数字证书以及指纹。

roles

角色是RBAC的重要概念,用于表明用户的身份类型。

user role mapping

用户角色映射关系。通常一个用户可能有多个角色,一个角色也可以对应不同的人。

composite roles

复合角色,听起来很玄乎,其实就是角色的从属关系或者说继承关系。 B 角色从属于 A 角色,那么你拥有了 A 角色就一定拥有 B 角色的权限。

groups

用户组,你可以将一系列的角色赋予定义好的用户组,一旦某用户属于该用户组,那么该用户将获得对应组的所有角色权限。

clients

客户端。通常指一些需要向 keycloak 请求以认证一个用户的应用或者服务,甚至可以说寻求 keycloak 保护并在 keycloak 上注册的请求实体都是客户端。

client adapters

keycloak 为了支持多语言和跨平台而设计的适配器,比如适配 Java 的、适配 Python 的。有些是内置的实现,有些需要我们按照 keycloak 的抽象定义来实现。后续我们主要和 Spring Boot Adapter 打交道。

identity provider

用来认证用户的服务,简称 IDPkeycloak 本身就是一个 IDP 。这个类似 Spring Security 中的 AuthenticationProvider 接口。

还有一些概念等遇到了会再补充,有点多,先消化消化。

总结

今天这一篇主要对 keycloak 进行一个初步的体验,搭建了一个开发环境供后续的学习,同时对 keycloak 的一些核心概念进行了汇总。不过由于篇幅限制没有完全的去梳理一些概念,不过学习都是循序渐进的,急不得。自定义 realm 和用户都建好了,下一篇我将尝试用 keycloak 来保护 Spring Boot 应用。业余时间,码字不易,还请多多关注,大力支持一下作者。

关注公众号:Felordcn获取更多资讯

个人博客:https://felord.cn


原文:开源认证授权管理平台Keycloak初体验 - 码农小胖哥的个人空间 - OSCHINA - 中文开源技术交流社区