keycloak概述及启动与项目搭建
keycloak 目前算是完全空白的一开内容,后续的一系列文章都是来整理学习这块内容的,目前本篇要做的就是了解keycloak 是什么?用于做什么?然后怎么配置启动?怎么集成到项目中?
keycloak的基本概述
从目前掌握的资料来看keycloak 是一种针对应用程序和服务访问管理的解决方案,它支持单点登陆,因此服务可以通过OpenID Connect、OAuth 2.0 等协议对接Keycloak。
我目前感觉下来keycloak 就是提供了一套管理用户信息的中间系统,其余的各个系统都可以通过登陆这个系统进行账户验证,而且它支持单点登录,也就是说登陆一下搞定全部应用。
keycloak各个组件及特性
关于keycloak 的特性其实在百度上面就能查到很多,我这里就是简单的汇总一下。
- SSO 单点登陆:keycloak 能够完全支持单点登陆和单点登出;
- 管理控制台:提供了基础web 的GUI,可以按照需求配置各种实例;
- 用户身份和访问:它可以作为一个单独的用于身份和访问管理器,以便于我们创建用户数据库,自定义角色和用户组。也就说可以实现各个不同系统或者模块的用户身份信息存储及验证;
- 外部身份标识源的同步:这个我理解就是可以用外部的用户数据库,比如:微信之类的用户,只要配置好对应的api 接口对接就能获取到外部数据;
- 身份代理:它还可以作为用户和一些外部身份提供者之间的代理。可以通过keycloak 的管理面板,俩编辑两侧对应关系的列表;
- 社交身份提供者:这个应该是说keycloak 本身也提供了一些支持的社交身份,可以通过管理面板来进行手动配置;
- 页面定制:这里就是说可以用自己定义管理面板的风格,定制 JS 脚本之类的。
上述基本就是keycloak 的特性,总结就是方便管理用户数据,有自己的用户数据库,也可以外接外部用户数据库,有一套自己的页面管理面板来管理用户信息,这套管理面板样式可以自己定义,同时最主要的单点登录。
keycloak的优点及不足
首先keycloak 的优点,最主要的可以白嫖,不要钱,其它的比如AuthO 或者 Okta 之类的就要收费。其余的优点网上一样有很多,我这边还是大体写一下,更加详细的可以查一查。
- 支持三种不用的身份验证协议;
- 有强大社区支持,能够能方便快捷的解决一些遇到的难题;
- 支持社交账号登陆;
- web可以进行修改,自定义个人化管理面板;
- SSO 可以支持用户同时访问多项服务。
那有优点,就有不足,其实也就是一些常见问题。
- 如果某个应用程序只有单个客户用到keycloak,那么他将无法获益SSO 的整体规模性优势;
- keycloak 原则上可以配置成一个纯用户数据库,但是它会附带各种特殊用途的表,因此还不如直接使用专有的用户关系型数据库;
- keycloak 也因为是免费开源的项目,所以社区中没有固定开发者、及其发展路线图,同时意味也无法为质量保证的企业级服务提供支持和响应水平。
总的来说,优点很明显,缺点其余的类似技术也存在,没有说十全十美的,但是项目开发中使用这个还是蛮方便的,尤其是目前的微服务架构,用这个做登陆中间系统可行。
keycloak的搭建和使用
这块目前我是还没有正式搭建过,下面基本上就是我目前搭建的全流程,一般情况下跟着我的步骤走是不会出现问题的,要是有问题还是问度娘吧,新技术没看源码的情况下,先看怎么用吧,过段时间再源码分析。(这里也可以参考:keycloak的搭建教程)
service端的启动和搭建
首先确定jdk 版本要在11之上;
然后去官网下载压缩包,可以用我这边的keycloak压缩包
将下载的安装包解压并重命名为keycloak。
修改keycloak相关配置,也可以保持默认配置,直接操作第五步。打开conf文件夹下的keycloak.conf文件修改keycloak的相关配置。更多的配置参考此处。
1
KC_HTTP_PORT=8090 #修改端口号为8090
打开命令行工具,定位到keycloak目录下。运行以下命令。(注意这是管理员权限运行)
1
bin/kc.bat start-dev
访问 http://localhost:8090 (按照你所配置的端口,如果没有配置的话,默认为8080)。首次登录会让你创建管理员。
使用第6步创建的管理员,登录Administration Console 。
然后可以进入管理面板,点击登陆,然后选择主题,开启国际化,选择中文,然后退出登录再次进入就是中文模式。
这样keycloak 的service 端的启动基本完成了,后面关于client 端的搭建,我这里使用的就是springboot,继续。
client端的启动和搭建
我这里使用的是springboot项目来搭建,但是在项目搭建之前,还需要在keycloak 的管理面板上面做一些配置工作具体如下:
- 首先登陆keycloak,进入管理面板后,要先添加域;
- 然后新建一个客户端;
这里最重要的是有效的重定向URL,至于访问方式可以修改为其它,设置会更安全
- 创建好客户端之后,再为其增加角色,我这里添加了一个user、一个admain;
- 再操作用户添加,首先点击添加用户,然后在完成用户名添加保存,再设置密码,最后也最重要的角色映射,选择客户端角色为刚刚添加的客户端,再为不同用户分配不同角色。
这样就完成了keycloak 的基本配置,如果客户端创建的时候选择的访问类型不是public,而是confidential 那么就还需在客户端设置凭证,这样项目才能进行访问该客户端。
那么下面就是对于springboot项目的搭建配置,其实还可以先在官网下载快速入门的demo,这里面就含有springboot的项目。
创建一个springboot 的基本项目,我这里用的是idea,具体的就不演示了,这个比较简单;
pom.xml 展示,注意keycloak 的版本不要错,我这里是18版本,要一一对相应;
1
2
3
4
5
6
7
8
9
10
11
12
13<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>18.0.0</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-adapter</artifactId>
<version>18.0.0</version>
</dependency>
</dependencies>application.yml 展示;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24server:
port: 8082
keycloak:
realm: keycloak-demo
auth-server-url: http://localhost:8080
ssl-required: external
resource: boot-demo
credentials:
secret: 6tjUHFcVraOHv3vqaes6J3kcYZxrwSSU
use-resource-role-mappings: true
security-constraints:
- authRoles:
- user
securityCollections:
- name: Logged
patterns:
- /user/*
- authRoles:
- admain
securityCollections:
- name: Admin resources
patterns:
- /admin/*测试端演示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26/**
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
*/
public class ApplicationController {
public String handleResourceA() {
return "user权限访问";
}
public String handleResourceB() {
return "没有权限访问";
}
public String handlePremiumResource() {
return "admain权限访问a";
}
public String handleAdminResource() {
return "admain权限访问b";
}
}
这样的配置完成之后基本就将一个简单client端启动完成了,至于后面的权限粒度管理,单点登出,服务发布等之后再讲,本篇内容就是简单的了解使用keycloak。
总结
keycloak 简单来说就是对用户数据库的管理,方便于多系统甚至外部系统来登陆注册等。本篇内容还是比较简单的,keycloak 的数据库配置,外部数据库对接,单点登陆,权限粒度管理等等后面再慢慢说。