Keycloak Docker镜像安装与Springboot集成使用入门


Docker镜像安装Keycloak

官方入门文档:https://www.keycloak.org/docs/latest/getting_started/

1.安装mysql

拉取镜像

docker pull mysql:5.7

内网仓库:
docker pull registry-1.docker.io/library/mysql:5.7`

创建服务网络

docker network create keycloak-network

创建本地数据卷

docker volume create mysql-data-keycloak

启动Mysql实例

First start a MySQL instance using the MySQL docker image:

1
2
3
4
5
6
7
8
9
docker run --restart=always --name mysql  \
--network keycloak-network \
-p 13306:3306 \
-v mysql-data-keycloak:/var/lib/mysql \
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=keycloak \
-e MYSQL_ROOT_PASSWORD=root123 \
-d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

登录mysql授权:

1
2
3
4
5
docker attach mysql
mysql -u root -p
GRANT ALL PRIVILEGES ON `keycloak`.* TO 'keycloak' @'%';
grant all on *.* to 'keycloak'@'%' identified by 'keycloak' with grant option;
flush privileges;

安装Keycloak

下载镜像:
docker pull docker.io/jboss/keycloak
或者:
docker.io/icolabora/keycloak

启动keycloak:需要设置useSSL=false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run --restart=always --name keycloak \
--network keycloak-network \
-p 6060:8080 \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
-e DB_VENDOR=mysql \
-e DB_ADDR=mysql \
-e DB_PORT=3306 \
-e DB_DATABASE=keycloak \
-e DB_USER=root \
-e DB_PASSWORD=root123 \
-e JDBC_PARAMS='connectTimeout=90&useSSL=false' \
-v /etc/localtime:/etc/localtime \
docker.io/jboss/keycloak

启动成功后,访问:
http://192.168.56.101:6060/

Keycloak使用入门

理解关键点

  • Realm:域,理解为一个项目空间,彼此隔离
  • Client:客户端,理解为某个微服务应用
  • Role:角色
  • User:用户
  • Access type:访问类型

理解授权过程

Three main processes define the necessary steps to understand how to use Keycloak to enable fine-grained authorization to your applications:

  • Resource Management 资源管理:就是哪些是受保护的内容
  • Permission and Policy Management 权限和政策管理:即资源权限与政策对应关系
  • Policy Enforcement 政策执行:角色对应关系

部署代码

下载keycloak-quickstarts,导入app-athuz-springboot项目。
修改配置文件:

1
2
3
4
5
6
keycloak.auth-server-url=http://192.168.56.101:6060/auth
keycloak.ssl-required=none
...
logging.level.root=ON
logging.level.org.springframework.boot=ON
spring.main.banner-mode=CONSOLE

由于原来项目httpclint包有冲突,修改pom.xml

1
2
3
4
5
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>

启动项目。

配置keycloak

admin登录keycloak之后,Add Realm -> select file,选择项目中config/quickstart-realm.json
查看clint中app-authz-springboot是否正常。

主要查看Authorization中的Resources Policies Permissions 是否有效。
我导入后发现政策和权限没有对应的资源,删除后手动建的。

附: 我可用的json文件

集成测试

访问:http://localhost:8080/
在user角色中的用户可以访问普通保护资源/protected/*,在user-premium中的用户可以访问高级保护资源/protected/premium/*.

异常记录

无效的参数 : redirect_uri

在keycloak服务器client中修改valid-redirect uris:
http://localhost:8080/*

failed verification of token: Token is not active

keycloak服务器与应用服务器的时区不一致导致token过期

参考信息


文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
《从新冠肺炎疫情冲击看全球与中国经济发前景》学习笔记 《从新冠肺炎疫情冲击看全球与中国经济发前景》学习笔记
听了复旦大学经济学院院长张军关于《从新冠肺炎疫情冲击看全球与中国经济发前景》的演讲,进行学习总结。 引言:新冠疫情全球肆虐,对全球经济造成了严重的冲击,与此同时沙特、俄罗斯进行的原油价格战,成为压倒金融市场的最后一根稻草。 这一系列黑天鹅
2020-04-24
下一篇 
Python如何连接SSL的Presto Python如何连接SSL的Presto
Python如何连接SSL的Presto?并将查询结果转为pandas dataFrame格式? 不加SSL的网上示例很多,但需要SSL参数的找很久没找到,这里解决了,贡献一下代码示例。123import pandas as pdfro
2020-02-20
  目录