2

上一篇文章简单介绍了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


码农小胖哥
3.8k 声望8k 粉丝