准备需要:
docker最新版,camunda官方建议使用容器且最好能使用k8s,而且jar包启动失败时不能停止
mysql8.0+,keycloak默认使用postgresql,我不会
提前启动好其他组件,es,tasklis,operate,zeebe,偷个懒,我使用的jar包运行,也可以容器
组件下载地址,版本8.3.4
因为容器通信的问题(应该是通信/网络的问题),我使用了局域网ip,而非localhost
identity是什么?
Identity是Camunda8部署负责身份验证和授权的标识组件,可以管理的有:
- Applications
- APIs
- Permissions
- Roles
Identity不是comunda8必要的6个组件(官网列出来的,但是如果使用Self-Managed也那就是8个组件),我搭建身份认证系统是因为使用user-service创建表单时看到了用户授权的字段
什么是keycloak?
keycloak是一款开源的功能丰富、易用且灵活的身份和访问管理软件,为开发人员提供了快速集成身份认证、授权和用户管理的解决方案
特点和功能
- 单点登录(Single Sign-On,SSO):Keycloak支持SSO,用户只需登录一次,即可访问多个通过Keycloak保护的应用程序。
- 集中式身份认证和授权:Keycloak充当一个认证和授权服务器,负责在不同应用程序间验证用户身份和授权访问权限。
- 多种身份验证方式:Keycloak支持多种身份验证方式,如用户名/密码、LDAP、Active Directory、社交登录(Google、Facebook等)、OpenID Connect等。
- 用户管理和组织结构:Keycloak提供了用户管理和组织结构管理功能,包括用户创建、更新、删除,以及组织结构的定义和管理。
- 多因素身份验证(Multi-Factor Authentication,MFA):Keycloak支持多因素身份验证,增加了额外的安全层,如短信验证码、电子邮件验证码等。
- 客户端适配器:Keycloak提供了各种客户端适配器,使得应用程序能够与Keycloak进行无缝集成,实现身份认证和授权。
- 客户端角色和权限管理:Keycloak允许定义和管理客户端角色和权限,精确控制用户对特定资源的访问权限。
- 基于标准的协议支持:Keycloak支持OpenID Connect、OAuth 2.0、SAML2.0等开放标准协议,与其他标准兼容的应用程序进行集成。
准备需要
camunda8版本对照,要求keycloak为21.x, 22.x,我用过的版本为22.0.5
keycloak版本要求22.0.5,对应数据库版本,mysql8.0
开始集成
keyclock
-
拉取keycloak镜像
docker pull keycloak/keycloak:22.0.5
-
创建数据库
这里要注意,我使用的是mysql,因为字符集和排序规则的问题,需要设置为utf8/utf8_unicode_ci,否则会因为"行"字段长度过长,注意,是"行"字段长度问题
不需要创建表,keycloak第一次启动时会自己创建表 -
启动命令
docker run -d -p 18080:8080 \ --name keycloak -p 18443:8443 \ -e KEYCLOAK_ADMIN=admin \ -e KEYCLOAK_ADMIN_PASSWORD=admin \ -e KC_HTTP_PORT=8080 \ -e KEYCLOAK_DATABASE_VENDOR=mysql \ -e KC_DB=mysql \ -e KC_DB_DRIVER=com.mysql.cj.jdbc.Driver \ -e KC_TRANSACTION_XA_ENABLED=false \ -e KC_DB_USERNAME=root \ -e KC_DB_PASSWORD=12345678 \ -e KC_DB_URL='jdbc:mysql://192.168.2.205:3306/keycloak?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true' \ keycloak/keycloak:22.0.5 start-dev \
-
注意事项
18080是对外暴露的端口,给identity使用
然后默认管理员密码
设置mysql数据库,驱动,关闭 XA 事务(分布式事务)数据库配置链接
https://www.keycloak.org/server/db -
配置权限
camunda添加已存在keycloak服务的地址
https://docs.camunda.io/docs/self-managed/identity/user-guide/configuration/connect-to-an-existing-keycloak/
说明一下,identity官网的配置有问题,只能作为参考-
首先创建一个名为camunda-platform的realm,realm可以看做是机构或者"工作空间"
-
创建名为camunda-identity的client,下一步
-
启用Client authentication,选择 Service accounts roles,下一步
-
配置root url,也就是identity的地址,保存
就配置一个就可以了,其他信息会有默认信息的,等到identity启动后会创建一些列的权限和配置
-
选择Service account roles选项卡,点击Assign role ,在弹窗中修改Fileter by roles为Filter by clients,选中manage-realm,manage-users,manage-clients, 点击Assign
-
点击Credentials,复制保存IDENTITY_CLIENT_SECRET,在下边启动identity使用
坑人的部分来了,官网没有提到的地方,这个步骤可以在identity启动后设置 -
创建用户,这个是作为identity的管理用户,否则启动identity后没有用户进入不了
我默认为camunda了,选择role mapping选项卡,根据client分配角色
这里有个问题,可能有的权限还没有,这个可以在identity启动后再设置
-
添加identity providers(这个也是没有提到的地方)
选择Keycloak OpenID Connect 或者OpenID Connect Discovery endpoint: http://192.168.2.106:18080/realms/camunda-platform/.well-known/openid-configuration Client ID: camunda-identity Client Secret: 这个就是上边保存的秘钥
-
identity
-
拉取镜像
默认最新版,或者自己指定版本也行 docker pull camunda/identity
这里默认其他camundaz组件都是按照官方配置默认接口启动的
-
变量配置
官方启动配置变量
https://docs.camunda.io/docs/self-managed/identity/deployment/configuration-variables/
这里要注意三个变量值,官网提供的有问题,没有/auth
KEYCLOAK_URL
IDENTITY_AUTH_PROVIDER_BACKEND_URL
IDENTITY_AUTH_PROVIDER_ISSUER_URL -
启动命令
docker run -d --name camunda-identity1 \ -p 8080:8080 camunda/identity \ java -jar /app/identity.jar \ --KEYCLOAK_URL=http://192.168.2.106:18080 \ --KEYCLOAK_REALM=camunda-platform \ --KEYCLOAK_SETUP_CLIENT_ID=camunda-identity \ --KEYCLOAK_SETUP_REALM=master \ --KEYCLOAK_SETUP_USER=admin \ --KEYCLOAK_SETUP_PASSWORD=admin \ --IDENTITY_CLIENT_ID=camunda-identity \ --IDENTITY_CLIENT_SECRET=3fZ15uFCODaMTiZbUx7vNfqz7FO6oDCV \ --IDENTITY_DATABASE_HOST=192.168.2.205 \ --IDENTITY_DATABASE_PORT=3306 \ --IDENTITY_DATABASE_NAME=keycloak \ --IDENTITY_DATABASE_USERNAME=root \ --IDENTITY_DATABASE_PASSWORD=12345678 --IDENTITY_AUTH_PROVIDER_BACKEND_URL=http://192.168.2.106:18080/realms/camunda-platform \ --IDENTITY_AUTH_PROVIDER_ISSUER_URL=http://192.168.2.106:18080/realms/camunda-platform \ --IDENTITY_URL=http://192.168.2.106:8080
注意:
KEYCLOAK_REALM, 这个是realm的名字
IDENTITY_CLIENT_ID, 这个是client的名字
IDENTITY_CLIENT_SECRET, 这个是上边的秘钥
IDENTITY_AUTH_PROVIDER_BACKEND_URL官方 -
搞定
访问identity,输入账号密码就好了,如果这里登录提示没有账号或密码,那就是上边的权限没配好,重新创建一个用户就好了
题外话
可以看看bitnami/keycloak,我一开始配置的有问题,一直以为是bitnami的问题
相关地址:
docker地址
https://hub.docker.com/r/keycloak/keycloak
github地址
https://github.com/bitnami/containers/tree/main/bitnami/keycloak
keycloak官网数据库配置
https://www.keycloak.org/server/db
keycloak启动docker
https://www.keycloak.org/getting-started/getting-started-docker
identity地址
https://docs.camunda.io/docs/self-managed/identity/what-is-identity/
identity添加keycloak独立服务
https://docs.camunda.io/docs/self-managed/identity/user-guide/configuration/connect-to-an-existing-keycloak/