Camunda8微服务流程引擎搭建实战 -- camunda-identity接入keycloak,使用mysql数据库以OpenID Connect的方式实现用户的权限管理

准备需要:

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是一款开源的功能丰富、易用且灵活的身份和访问管理软件,为开发人员提供了快速集成身份认证、授权和用户管理的解决方案

特点和功能
  1. 单点登录(Single Sign-On,SSO):Keycloak支持SSO,用户只需登录一次,即可访问多个通过Keycloak保护的应用程序。
  2. 集中式身份认证和授权:Keycloak充当一个认证和授权服务器,负责在不同应用程序间验证用户身份和授权访问权限。
  3. 多种身份验证方式:Keycloak支持多种身份验证方式,如用户名/密码、LDAP、Active Directory、社交登录(Google、Facebook等)、OpenID Connect等。
  4. 用户管理和组织结构:Keycloak提供了用户管理和组织结构管理功能,包括用户创建、更新、删除,以及组织结构的定义和管理。
  5. 多因素身份验证(Multi-Factor Authentication,MFA):Keycloak支持多因素身份验证,增加了额外的安全层,如短信验证码、电子邮件验证码等。
  6. 客户端适配器:Keycloak提供了各种客户端适配器,使得应用程序能够与Keycloak进行无缝集成,实现身份认证和授权。
  7. 客户端角色和权限管理:Keycloak允许定义和管理客户端角色和权限,精确控制用户对特定资源的访问权限。
  8. 基于标准的协议支持: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官网的配置有问题,只能作为参考

    1. 首先创建一个名为camunda-platform的realm,realm可以看做是机构或者"工作空间"
      在这里插入图片描述

    2. 创建名为camunda-identity的client,下一步
      在这里插入图片描述

    3. 启用Client authentication,选择 Service accounts roles,下一步
      在这里插入图片描述

    4. 配置root url,也就是identity的地址,保存
      就配置一个就可以了,其他信息会有默认信息的,等到identity启动后会创建一些列的权限和配置
      在这里插入图片描述

    5. 选择Service account roles选项卡,点击Assign role ,在弹窗中修改Fileter by roles为Filter by clients,选中manage-realm,manage-users,manage-clients, 点击Assign
      在这里插入图片描述

    6. 点击Credentials,复制保存IDENTITY_CLIENT_SECRET,在下边启动identity使用
      坑人的部分来了,官网没有提到的地方,这个步骤可以在identity启动后设置

    7. 创建用户,这个是作为identity的管理用户,否则启动identity后没有用户进入不了
      我默认为camunda了,选择role mapping选项卡,根据client分配角色
      这里有个问题,可能有的权限还没有,这个可以在identity启动后再设置
      在这里插入图片描述

    8. 添加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/

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keycloak是一个开源的身份认证和授权解决方案,支持多种协议,包括OpenID Connect。下面是使用OpenID Connect获取token的步骤: 1. 配置Keycloak 首先,你需要在Keycloak中创建一个Realm,并且在该Realm中创建一个Client。在创建Client时,需要选择Client Protocol为openid-connect,并设置其他相关参数。 2. 获取Authorization Code 然后,你需要使用浏览器访问Keycloak的授权页面,例如: ``` http://localhost:8080/auth/realms/<realm>/protocol/openid-connect/auth?client_id=<client-id>&response_type=code&redirect_uri=<redirect-uri>&scope=openid ``` 其中,`<realm>`是你创建的Realm名称,`<client-id>`是你创建的Client ID,`<redirect-uri>`是你的应用程序接收Authorization Code的URI。 访问该页面后,Keycloak会要求你登录,并请求授权。如果授权成功,Keycloak会将Authorization Code作为参数重定向到你的应用程序的Redirect URI处。 3. 获取Access Token 接下来,你需要使用Authorization Code向Keycloak请求Access Token。可以使用以下命令: ``` curl \ -d "grant_type=authorization_code" \ -d "client_id=<client-id>" \ -d "client_secret=<client-secret>" \ -d "code=<authorization-code>" \ -d "redirect_uri=<redirect-uri>" \ "http://localhost:8080/auth/realms/<realm>/protocol/openid-connect/token" ``` 其中,`<client-id>`是你创建的Client ID,`<client-secret>`是你创建的Client Secret,`<authorization-code>`是从Keycloak获取的Authorization Code,`<redirect-uri>`是你的应用程序接收Authorization Code的URI,`<realm>`是你创建的Realm名称。 如果一切顺利,Keycloak会返回一个包含Access Token和其他信息的JSON响应。 至此,你已经成功地使用OpenID Connect获取了Access Token。可以使用该Token访问Keycloak保护的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值