我在
Keycloak (version 1.0.4.Final)
服务器中使用 JBOSS AS 7.1.1
。服务器位于亚马逊AWS上。
我可以使用 keycloak 启动 jboss 服务器。我可以在点击 URL 时看到 keycloak 默认屏幕 -
ServerIP:8080/auth
但是当我单击
Administration Console
链接转到登录屏幕时。我收到一个页面,上面写着 - HTTPS required
服务器在AWS上,更改为
"ssl-required" : "none",
在通用适配器配置中没有帮助。
如何解决这个问题?
编辑:我在 keycloak-1.2.0.Beta1 版本中没有遇到此问题。
我在 docker 容器内运行 key cloak,keycloak 命令行工具在 keycloak 容器内可用。
docker exec -it {contaierID} bash
cd keycloak/bin
./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
./kcadm.sh update realms/master -s sslRequired=NONE
如果没有创建admin用户,则可以通过此命令创建用户。
./add-user-keycloak.sh --server http://ip_address_of_the_server:8080/admin --realm master --user admin --password adminPassword
更新: 对于较新版本,文件可在以下路径中找到:
/opt/jboss/keycloak/bin
如果您想在您的领域禁用它并且无法使用 UI,请直接在数据库上执行此操作:
update REALM set ssl_required='NONE' where id = 'master';
注意 - 重新启动 keycloak 即可生效
您可以使用 keycloak 命令行管理工具来更改设置,只要它可以验证本地 IP 地址即可。您可以在本地主机上临时启动 Keycloak 来进行此更改。
kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
kcadm.sh update realms/realmname -s sslRequired=NONE
显然,请确保根据需要替换域名、用户名、端口等。
有关 Admin CLI 入门的更多信息,请参阅文档:服务器管理:Admin CLI
这是相当老的,现在是发布版本(我正在使用 Keycloak 1.9.3 演示/开发者包),但是为了节省一些可怜的灵魂一些时间......
Keycloak 现在对所有外部 IP 地址默认使用 HTTPS。不幸的是,据我所知,演示包附带的 Wildfly 实例不支持 HTTPS。如果您在远程计算机上安装 Keycloak,则这是一个相当疯狂的默认设置,因为实际上无法直接访问 Keycloak 管理控制台。
此时,你有两个选择; 1) 在 Wildfly 中安装 HTTPS 或 2) 通过 SSH 隧道连接到远程计算机并通过它代理您的浏览器,转到管理控制台并关闭 SSL 要求(领域设置 -> 登录 -> 需要 SSL)。这是可行的,因为本地连接不需要 SSL。
记住首先要创建管理员用户,方法是转到 $KEYCLOAK_HOME/keycloak/bin 并运行 ./add-user-keycloak -r master -u <> -p <>。这个添加用户脚本不像 Wildfly 添加用户脚本那样是交互式的,您需要将其全部放在命令行上。
希望这有帮助!
有点晚了,但我相信人们会发现这很有用。如果您使用 docker 运行 keycloak,而不是转发端口 8080,而是转发 8443,它的工作方式就像魅力一样。
docker run -p 8443:8443 -e KEYCLOAK_USER=username -e KEYCLOAK_PASSWORD=password jboss/keycloak
我在 docker keycloak 中测试: 探测:领域设置 -> 登录 -> 需要 SSL 并关闭。 或 docker exec YOUR_DOCKER_NAME /opt/jboss/keycloak/bin/jboss-cli.sh --connect \ "/subsystem=undertow/server=default-server/http-listener=default:read-resource"
如果您在 kubernetes 上部署 keycloak,您可以尝试设置以下 ENV VAR
spec:
containers:
- name: keycloak
env:
- name: PROXY_ADDRESS_FORWARDING
value: "true"
尝试连接keycloak数据库并更新表
update REALM set ssl_required='EXTERNAL' where name = 'master';
然后重启docker
docker compose restart
只是一个完整的工作 docker-compose:
version: '3'
services:
keycloak:
image: jboss/keycloak:latest
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- PROXY_ADDRESS_FORWARDING=true
- DB_VENDOR=mysql
- DB_ADDR=db
- DB_PORT=3306
- DB_DATABASE=keycloak
- DB_USER=keycloak
- DB_PASSWORD=example
ports:
- "8181:8080"
- "9990:9990"
db:
image: mysql:5
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: example
volumes:
- ../data-keycloak:/var/lib/mysql
ports:
- "3309:3306"
然后在db中执行:
update REALM set ssl_required='NONE' where name = 'master';
当然,这不适用于生产,除非您在安全的环境中使用。