安装&初始化
下载
只需前往 http://www.keycloak.org/downloads.html ,按需进行下载。
笔者下载的是“Standalone server distribution” 。
安装&启动
安装Keycloak非常简单,步骤如下:
- 解压下载下来的安装包
- 将目录切换到
KEYCLOAK_PATH/bin
,其中KEYCLOAK_PATH是您Keycloak的根目录 - 执行
./standalone.sh
,即可启动Keycloak,如需后台运行,则执行./standalone.sh &
。
初始化
启动后,访问http://localhost:8080/ 将会显示类似如图的界面:
该界面让我们创建一个初始化的admin账户。那么我们不妨填写一下,为了测试方便,我们将账号/密码分别设为admin/admin
,然后点击create按钮,将会跳转到如下界面:
由图可知,管理员账户已创建成功,Keycloak初始化也已完成。
管理控制台
点击上图的Administration Console
按钮,将会弹出登录页面:
输入我们之前初始化设置的账号、密码,并点击Login in
按钮,即可登录管理控制台,如下图所示:
由图可知,管理控制台的菜单挺多的,功能也比较丰富,不禁让人有点恐惧——这么多菜单,这么多子功能项,得花多少时间研究啊!没有关系,可以随着笔者的节奏,逐步深入。
与Spring Boot整合
纳尼?上一篇才讲了个初始化,这一篇就与Spring Boot整合啦?这是什么节奏?按照套路,不应该先介绍下这个术语,那个概念吗?
没有关系,Keycloak非常简单,我们可以在实战中了解各种概念。
整合Keycloak非常简单,因为Keycloak为我们提供了各种语言、各种框架的 Adapter
,基于OpenID/SAML协议的Adapter,大概二十多个,有兴趣的可前往:http://www.keycloak.org/docs/latest/securing_apps/index.html#openid-connect-3 阅读。后面等笔者有空了,也会将这些文章翻译出来,敬请期待。
在这里,我们选择OpenID协议中的Spring Boot Adapter
,相关文档:http://www.keycloak.org/docs/latest/securing_apps/index.html#_spring_boot_adapter ,当然,如果你对Spring Security比较熟悉,也可以选用http://www.keycloak.org/docs/latest/securing_apps/index.html#_spring_security_adapter 。不过笔者认为Spring Security过于复杂,用Spring Boot Adapter已经能够完成我们的需求,所以就不搞Spring Security Adapter了。
微服务
假设有一个Spring Boot微服务:
- 名为:
ms-content-sample
- 首页是http://localhost:8081
- 它有个路径http://localhost:8081/articles ,只有
user-role
角色的用户才能访问,test-role
角色的用户不允许访问。
下面我们来为该服务整合Keycloak,并逐步实现基于Keycloak的单点认证及授权。
准备工作
创建Realm
- 首先,我们需要创建一个Realm。Realm是一个隔离的概念,Realm A中的用户与Realm B中的用户完全隔离。当然,也可以不创建Realm,直接用
Master
这个Realm,不过一般来说,为了资源的隔离,以及更好的安全性不太建议与管理员共用Realm。如下图所示:
-
输入Realm名称,这里,如图所示,我们创建了一个名为
realm
的Realm。
创建Client
-
创建完realm后,我们来为
ms-content-sample
创建Client
,点击下图的Create按钮。 -
填写Client信息,这边我们创建一个名为
ms-content-sample
的Client。
设置Client
-
下面我们来配置Client,点击途中的Edit按钮:
-
设置Client
如图,我们配置了Access Type为public,当然还有其他选项,例如bearer-only,我们先选public,bearer-only我们后面会细讲;配置了Valid Redirect URLS,这是认证成功后跳转到的页面地址,其中我们使用了通配符;配置了Base URL,一般配置成微服务首页即可。
创建角色
比较简单,如图,我们创建了两个角色,user-role
以及test-role
。
创建用户并分配角色
-
创建用户
-
分配角色
如图,点击user-role,并点击Add selected,即可为user1用户分配user-role角色;同理,为user2用户分配test-role角色。
为用户设置登录密码
为Spring Boot微服务整合Keycloak
话不多说,上代码——
基于Spring Boot Adapter的整合步骤如下:
-
添加依赖管理,引入Keycloak adapter的bom:
<dependencyManagement> <dependencies> <dependency> <groupId>org.keycloak.bom</groupId> <artifactId>keycloak-adapter-bom</artifactId> <version>3.4.0.Final</version> <type>pom</type