Docker容器(Keycloak+Hesk)与Nginx结合的OIDC认证配置问题
Docker容器(Keycloak+Hesk)与Nginx结合的OIDC认证配置问题
嘿,看你的环境已经搭得七七八八了——Docker跑Keycloak在8090、Hesk在8088,主机用Nginx管反向代理和SSL,还给auth.example.de和support.example.de做了HTTP转HTTPS的配置。不过你贴的Nginx代码好像没写完,而且核心的OIDC认证集成部分还没涉及到对吧?我来帮你一步步捋清楚该怎么配置。
第一步:完善Nginx反向代理配置
先把你未完成的Nginx配置补全,确保Keycloak和Hesk的请求能被正确转发,同时适配Keycloak的WebSocket需求:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; map $http_upgrade $connection_upgrade { default upgrade; '' close; } # auth.example.de HTTP转HTTPS server { listen 80; server_name auth.example.de; return 301 https://$host$request_uri; } # Keycloak的HTTPS反向代理 server { listen 443 ssl; server_name auth.example.de; ssl_certificate /path/to/your/valid/cert.crt; ssl_certificate_key /path/to/your/valid/cert.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8090; # 传递必要的请求头,让Keycloak识别真实客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Keycloak控制台需要WebSocket支持,必须加这两行 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } # support.example.de HTTP转HTTPS server { listen 80; server_name support.example.de; return 301 https://$host$request_uri; } # Hesk的HTTPS反向代理 server { listen 443 ssl; server_name support.example.de; ssl_certificate /path/to/your/valid/cert.crt; ssl_certificate_key /path/to/your/valid/cert.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:8088; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }
注意:把/path/to/your/valid/cert.crt和/path/to/your/valid/cert.key替换成你实际的SSL证书路径
第二步:Keycloak客户端配置(给Hesk做OIDC认证用)
登录Keycloak管理控制台(https://auth.example.de/admin),按以下步骤操作:
- 进入你的目标Realm(没有的话先新建一个)
- 左侧菜单点「Clients」→「Create」:客户端ID填
hesk-support,协议选openid-connect,根URL填https://support.example.de,保存 - 在「Settings」标签页:
- 访问类型选
confidential(因为Hesk是服务器端应用) - 有效重定向URI填
https://support.example.de/*(如果Hesk有固定回调路径,就填具体路径) - 开启「Direct Access Grants Enabled」(如果需要密码模式,推荐优先用授权码模式)
- 访问类型选
- 切换到「Credentials」标签页,复制生成的客户端密钥(Secret),后面Hesk配置要用到
- 「Mappers」标签页添加必要的用户属性映射,比如把Keycloak的
email、username映射到OIDC的claim中,方便Hesk同步用户信息
第三步:Hesk的OIDC集成配置
原生Hesk没有内置OIDC支持,需要安装第三方OIDC插件(比如社区维护的hesk-oidc插件),安装完成后在Hesk后台配置:
- OIDC提供者URL:
https://auth.example.de/realms/你的Realm名称 - 客户端ID:
hesk-support(刚才Keycloak里创建的) - 客户端密钥:Keycloak复制的Secret值
- 回调URL:
https://support.example.de/插件指定的回调路径(比如hesk_oidc_callback.php,看插件文档) - 开启「自动创建用户」:让Keycloak用户首次登录时自动在Hesk生成账号
- 用户属性映射:把OIDC返回的
email、username对应到Hesk的邮箱、用户名字段
一些踩坑注意事项
- 确保Keycloak容器能正确识别HTTPS请求:Nginx传递的
X-Forwarded-Proto头必须正确,否则Keycloak会生成HTTP回调URL导致重定向循环 - 测试登录流程:访问
https://support.example.de,点击登录应该跳转到Keycloak登录页,登录成功后自动回到Hesk并完成登录 - 检查DNS解析:确保auth.example.de和support.example.de都指向你的主机公网IP
备注:内容来源于stack exchange,提问作者kSp
相关产品推荐
相关产品推荐

