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 | docker run --restart=always --name mysql \ |
登录mysql授权:1
2
3
4
5docker 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=false1
2
3
4
5
6
7
8
9
10
11
12
13
14docker 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
6keycloak.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.xml1
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过期