以管理员身份登录 Keycloak 时出现“需要 HTTPS”
Posted
技术标签:
【中文标题】以管理员身份登录 Keycloak 时出现“需要 HTTPS”【英文标题】:"HTTPS required" while logging in to Keycloak as admin 【发布时间】:2015-08-17 19:27:43 【问题描述】:我在JBOSS AS 7.1.1
服务器中使用Keycloak (version 1.0.4.Final)
。服务器在 Amazon AWS 上。
我可以用 keycloak 启动 jboss 服务器。我可以在点击 URL 时看到 keycloak 默认屏幕 - ServerIP:8080/auth
但是当我点击Administration Console
链接进入登录屏幕时。我收到一个页面说 - HTTPS required
服务器在 AWS 上,改为"ssl-required" : "none",
一般适配器配置没有帮助。
如何解决这个问题?
编辑:我在 keycloak-1.2.0.Beta1 版本中没有遇到这个问题。
【问题讨论】:
【参考方案1】:这已经很老了,现在发布版本(我正在使用 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 添加用户脚本那样具有交互性,您需要将其全部放在命令行中。
希望这会有所帮助!
【讨论】:
第二个选项是什么? 第二个选项是通过隧道进入远程机器。我更新了我的答案,所以很清楚。【参考方案2】:如果您想为您的领域禁用它并且无法使用 UI,请直接在数据库上执行:
update REALM set ssl_required='NONE' where id = 'master';
注意 - 重新启动 keycloak 以生效
【讨论】:
如果您只有 SSH 访问权限并且 Keycloak 与嵌入式 DB 一起运行,您可以使用本机 DB 客户端,例如对于 H2: java -cp您可以使用 keycloak 命令行管理工具来更改设置,只要它可以通过本地 IP 地址进行身份验证。您可以在 localhost 上临时启动 Keycloak 以进行此更改。
kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
kcadm.sh update realms/realmname -s sslRequired=NONE
显然,请确保根据需要替换域名、用户名、端口等。
有关开始使用 Admin CLI 的更多信息,请参阅文档:http://www.keycloak.org/docs/3.3/server_admin/topics/admin-cli.html
【讨论】:
这是一个更好的解决方案,因为在我的情况下不需要重新启动 Keycloak(一个 docker 容器)【参考方案4】:我在 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
如果没有创建管理员用户,则可以通过该命令创建用户。
./add-user-keycloak.sh --server http://ip_address_of_the_server:8080/admin --realm master --user admin --password adminPassword
更新:
对于较新的版本,文件在以下路径中可用:/opt/jboss/keycloak/bin
【讨论】:
如果有人使用 Kubernetes Helm Chart,kubectl exec -it keycloak-0 -- /bin/bash
进入容器
它对我不起作用。我得到HTTPS required [invalid_request]
。
对于较新版本的文件在以下路径中可用:/opt/jboss/keycloak/bin
@NirojanSelvanathan,您的评论节省了我的时间。我在 docker 容器中找不到 keycloak 文件夹。谢谢
@NirojanSelvanathan 您的方法有效,请更新答案本身中的评论详细信息[关于较新版本]。谢谢【参考方案5】:
我在 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"
【讨论】:
【参考方案6】:如果您在 kubernetes 上部署 keycloak,您可以尝试设置以下 ENV VAR
spec:
containers:
- name: keycloak
env:
- name: PROXY_ADDRESS_FORWARDING
value: "true"
【讨论】:
【参考方案7】:这有点晚了,但我相信人们会发现这很有用。如果您使用 docker 运行 keycloak,而不是转发端口 8080,转发 8443,它就像魅力一样工作。
docker run -p 8443:8443 -e KEYCLOAK_USER=username -e KEYCLOAK_PASSWORD=password jboss/keycloak
【讨论】:
您必须访问 https[://]URL:8443。如果还是不行,请尝试降级keycloak的版本 @Nirojan Selvanathan 提出的方法运行良好 适用于最新版本 15.x。试试docker run -d --name keycloak -p 8443:8443 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=h2 quay.io/keycloak/keycloak:15.0.1
Keycloak 会自动生成自签名证书。使用 HTTPS 访问您的站点。示例 - https://your-hostname:8443/auth/
以上是关于以管理员身份登录 Keycloak 时出现“需要 HTTPS”的主要内容,如果未能解决你的问题,请参考以下文章
尝试调用 AIA 时,Keycloak“处理对身份提供者的身份验证请求时出现意外错误”
将 Keycloak 用作 WSO2 身份服务器的联合身份提供者时出现 SSL 错误
安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges