以管理员身份登录 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 .jar org.h2.tools.Shell -url "jdbc:h2:file:" -user -password -sql "update REALM set ssl_required='NONE' 其中 id = 'master'" 执行此操作后还必须重新启动 keycloak。 执行此操作后我得到 [org.keycloak.events] (默认任务 1) type=LOGIN_ERROR【参考方案3】:

您可以使用 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 错误

从 keycloak 刷新访问令牌时出现 CORS 错误

安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges

如何在 Keycloak 中创建客户端以与 AWS Cognito 身份联合使用

Keycloak Angular 2 - 检查身份验证状态 Keycloak 对象