docker
  • docker教程
  • advanced
    • Docker 构建缓存指南
    • Docker清理数据卷(volume prune)
    • Docker分配CPU资源
    • Dockerfile+Maven插件构建SpringBoot镜像(推荐)
    • Dockerfile构建SpringBoot镜像
    • docker-find-volume-container-mapping
    • idea配置docker
    • Docker inspect 检测所有容器挂载状态的脚本
    • Docker inspect 查看容器、镜像的高级用法
    • Docker Jenkins进阶配置
    • 基于jenkins容器部署SpringBoot应用构建镜像(基于Dockerfile+Maven插件构建)
    • Keycloak Docker容器部署文档
    • Keycloak Docker容器部署文档
    • hostname-strict 参数详解
    • docker-keycloak-image
    • docker-keycloak-prod
    • Maven插件构建SpringBoot镜像(二)
    • 基于Maven插件为SpringBoot应用构建镜像并推送到远程_私人仓库(Docker Hub)
    • Maven插件构建SpringBoot镜像(一)
    • Docker MongoDB进阶配置
    • Docker 多阶段构建指南
    • Docker MySql进阶配置
    • Docker network进阶配置
    • Docker Nginx进阶配置
    • Docker清理悬空镜像(空(none)镜像)
    • Docker pip install --no-cache-dir
    • Docker redis进阶配置
    • Docker安全的清理匿名数据卷
    • Docker Bind Mount vs Volume 的区别
  • concepts
    • docker、docker engine和docker desktop区别
    • 架构
    • 什么是容器?
    • 什么是镜像?
    • 什么是Docker?
    • 什么是仓库?
  • docker-compose
    • Docker Compose 锚点的用法
    • docker-compose 编排多服务
    • docker-compose 常用命令
    • docker-compose 部署jenkins
    • docker-compose安装mySql
    • docker-compose网络配置
    • docker-compose安装nginx
    • docker-compose安装redis
    • docker Compose 示例1
  • docker-hub
    • Docker Hub账号服务说明
  • install
    • CentOS Docker 安装
    • Debian Docker 安装
    • Docker 安装 Apache
    • Docker 安装 CentOS
    • Docker 安装 Elasticsearch
    • Docker 安装 GitLab
    • Docker 安装 Jenkins
    • Docker 安装 MongoDB
    • Docker 安装 MySQL
    • Docker 安装 Nginx
    • Docker 安装 Node.js
    • Docker 安装 PHP
    • Docker 安装 Portainer
    • Docker Python 官方镜像使用说明(TAG说明)
    • Docker 安装 Python
    • Docker 安装 Redis
    • Docker 安装 Tomcat
    • Docker 安装 Ubuntu
    • Docker 安装 Wordpress
    • Docker 国内镜像加速
    • MacOS Docker 安装
    • Ubuntu Docker 安装
    • Windows Docker 安装
  • manual
    • Docker attach 命令
    • Docker build 命令
    • Docker 清理命令
    • Docker命令大全
    • Docker commit 命令
    • docker-compose-run-command
    • Docker cp 命令
    • Docker create 命令
    • Docker diff 命令
    • Docker rm 命令
    • Docker exec 命令
    • Docker export 命令
    • Docker history 命令
    • Docker images 命令
    • Docker import 命令
    • Docker info 命令
    • Docker inspect 命令
    • Docker kill 命令
    • Docker load 命令
    • Docker login/logout 命令
    • Docker logs 命令
    • Docker network 命令
    • Docker pause/unpause 命令
    • Docker port 命令
    • Docker 常见问题
    • Docker ps 命令
    • Docker pull 命令
    • Docker push 命令
    • Docker rename 命令
    • docker-resources
    • Docker rm 命令
    • Docker rm 命令
    • Docker run 命令
    • Docker save 命令
    • Docker search 命令
    • Docker start/stop/restart 命令
    • Docker stats 命令
    • Docker tag 命令
    • Docker top 命令
    • Docker version 命令
    • Docker version 命令
    • Docker wait 命令
    • diff
      • Docker Compose 和 docker-compose 区别
      • Docker import、export 与 save、load 命令 区别
  • usage
    • Docker docker-compose 使用
    • Docker 容器连接
    • Docker 容器使用
    • Docker Dockerfile Ptyhon实战配置-1
    • Docker Dockerfile Ptyhon实战配置之多阶段构建-2
    • Docker Dockerfile
    • Docker 镜像使用
    • Docker Machine
    • Docker 仓库管理
    • Docker 重启策略
    • Swarm集群管理
  • assets
    • mysql
      • my.cnf
Powered by GitBook
On this page
  • 功能说明
  • 安全原理
  • 配置选项
  • Docker 配置示例
  • 代理配置场景
  • 验证规则
  • 调试工具
  • 实际应用建议

Was this helpful?

  1. advanced

hostname-strict 参数详解

功能说明

默认情况下,Keycloak 要求配置 hostname 选项并且不会动态解析 URL。这是一个安全措施。

安全原理

Keycloak 会自由地披露自己的 URL,例如通过 OIDC Discovery 端点,或作为电子邮件中密码重置链接的一部分。如果主机名是从主机名头动态解释的,它可能为潜在攻击者提供操作电子邮件中 URL 的机会,将用户重定向到攻击者的虚假域,并窃取敏感数据,如操作令牌、密码等。

配置选项

生产环境(默认 hostname-strict = true)

# 必须显式配置 hostname 或设置 hostname-strict=false
bin/kc.sh start --hostname my.keycloak.org

开发环境(默认 hostname-strict = false)

# 开发模式下默认允许动态解析
bin/kc.sh start-dev

Docker 配置示例

启用严格模式(生产推荐)

keycloak:
  environment:
    KC_HOSTNAME: https://my.keycloak.org
    KC_HOSTNAME_STRICT: "true"  # 生产环境默认值
  command:
    - start
    - --hostname=https://my.keycloak.org

禁用严格模式(开发/测试)

keycloak:
  environment:
    KC_HOSTNAME_STRICT: "false"
  command:
    - start-dev
    - --hostname-strict=false

代理配置场景

使用反向代理时

keycloak:
  environment:
    KC_HOSTNAME_STRICT: "false"
    KC_PROXY_HEADERS: "forwarded"  # 或 "xforwarded"
  command:
    - start
    - --hostname-strict=false
    - --proxy-headers=forwarded

验证规则

根据官方文档,以下验证规则适用:

  1. 生产模式下:必须显式配置 --hostname 或 --hostname-strict=false

  2. 开发模式下:--hostname-strict=false 是默认值

  3. 如果未配置 hostname

    :

    • hostname-backchannel-dynamic 必须设置为 false

    • hostname-strict 必须设置为 false

调试工具

要排查主机名配置问题,可以使用专用的调试工具:

bin/kc.sh start --hostname=mykeycloak --hostname-debug=true

然后访问:http://mykeycloak:8080/realms/<your-realm>/hostname-debug

实际应用建议

开发环境

environment:
  KC_HOSTNAME_STRICT: "false"
  KC_HTTP_ENABLED: "true"
command:
  - start-dev
  - --hostname-strict=false

生产环境

environment:
  KC_HOSTNAME: "https://keycloak.example.com"
  KC_HOSTNAME_STRICT: "true"
command:
  - start
  - --hostname=https://keycloak.example.com

这个参数对于 Keycloak 的安全性非常重要,特别是在生产环境中防止主机名劫持攻击。

PreviousKeycloak Docker容器部署文档Nextdocker-keycloak-image

Last updated 4 days ago

Was this helpful?