现象
我遇到 的问题和网上这个issue基本一致
https://github.com/codecentric/helm-charts/issues/163
问题基本如下Script upload is disabled
16:51:04,392 WARN [org.keycloak.services] (ServerService Thread Pool -- 68) KC-SERVICES0005: Unable to import realm quarkus from file /realm/realm.json.: java.lang.RuntimeException: Script upload is disabled
官网从keycloak7版本后官方已经禁止掉了通过script脚本来import realm 文件的功能
更坑的是,我发现通过官方的api接口也没办法上传scirpt。报同样的错。
解决思路
简单的看了下源码,需要在启动keycloak时设置一个环境变量keycloak.profile.feature.upload_scripts=enabled,本来感觉应该是很简单的配置。但我在docker环境下怎么设置都感觉没生效。于是简单的看了下起动脚本的源码。
有兴趣的可以看一下。https://github.com/amu007/blog/blob/master/keycloak/case/docker-entrypoint.sh
细细看了下。原来是代码最后两行。所有应用的系统 变量不是在程序里面去读的。而是放在SYS_PROPS这个变量里面。
exec /opt/jboss/keycloak/bin/standalone.sh $SYS_PROPS $@
而SYS_PROPS就根本不会处理变量keycloak.profile.feature.upload_scripts。所以不管怎么设置,keycloak都使用不了这个值
结论
找到问题根源,解决起来就比较容易了
通过类似于注入的方式,把(keycloak.profile.feature.upload_scripts)的声明和赋值注入到某个脚本中支持的变量中去。
如
KEYCLOAK_IMPORT="/data/keycloak/realm-export.json -Dkeycloak.profile.feature.upload_scripts=enabled"
大家参考一下我的 k8s yaml相关部分的起动脚本
containers: \n
- name: keycloak
image: hub.kce.ksyun.com/autodl/keycloak:11.0.2
imagePullPolicy: Always
env:
- name: KEYCLOAK_USER
value: admin
- name: KEYCLOAK_PASSWORD
value: KEYCLOAK_PASSWORD
- name: KEYCLOAK_IMPORT
value: "/data/test-realm-config/test-realm.json -Dkeycloak.profile.feature.upload_scripts=enabled"
写文章不容易。如果对你有帮助。打个赏再走吧
网友评论