You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm容器间OAuth2通信问题:求回调失效的安全解决方案

针对Docker Swarm中OAuth2集成问题的解决方案

方案1:通过Traefik内部路由访问Authelia(推荐)

核心思路是让服务在Swarm overlay网络内,直接通过Traefik的内部域名访问Authelia的HTTPS端点,绕开主机IP限制:

  • 确保Traefik和需要OAuth的服务(HedgeDoc、Immich)都加入同一个Swarm overlay网络(比如traefik-public)。
  • 给Authelia添加Traefik标签,配置一个仅内部访问的路由:
    traefik.http.routers.authelia-internal.rule: Host(`authelia-internal`)
    traefik.http.routers.authelia-internal.entrypoints: websecure
    traefik.http.routers.authelia-internal.tls: true
    traefik.http.routers.authelia-internal.service: authelia
    
  • 修改HedgeDoc/Immich的OAuth配置,将授权、令牌等端点替换为内部路由地址,比如:
    • 授权端点:https://authelia-internal/oauth/authorize
    • 令牌端点:https://authelia-internal/oauth/token
      这样容器直接在overlay网络内通过Traefik访问Authelia的HTTPS服务,无需依赖主机IP或手动配置extra_hosts。

方案2:为Authelia开启内部HTTPS服务

既然直接访问authelia:9091缺HTTPS,那就给Authelia配置内部自签名证书,让服务直接连内部HTTPS端口:

  • 生成自签名证书(用openssl命令):
    openssl req -x509 -newkey rsa:4096 -keyout authelia.key -out authelia.crt -days 365 -nodes -subj "/CN=authelia"
    
  • 将证书文件挂载到Authelia容器的配置目录,修改Authelia的configuration.yml开启HTTPS:
    server:
      host: 0.0.0.0
      port: 9091
      tls:
        key: /config/authelia.key
        certificate: /config/authelia.crt
    
  • 在HedgeDoc/Immich的配置中,关闭SSL证书验证(因为是自签名),并将OAuth端点改为https://authelia:9091/oauth/...,比如HedgeDoc添加环境变量:
    environment:
      - HD_OAUTH2_TLS_INSECURE=true
    
    此方案完全在Swarm内部通信,彻底避开主机IP访问问题。

方案3:利用Swarm服务VIP配置静态映射

Swarm服务的VIP(虚拟IP)在服务生命周期内保持稳定,可替代动态变化的主机IP:

  • 先获取Traefik服务的VIP:
    docker service inspect traefik --format '{{.Endpoint.VirtualIPs}}'
    
  • 将该VIP配置到HedgeDoc/Immich的extra_hosts中:
    extra_hosts:
      - "auth.example.com:192.168.128.2" # 替换为实际获取的VIP
    
    这个方案比手动填主机IP稳定,只要Traefik服务不删除重建,VIP就不会变,减少重启后的配置修改次数。

内容的提问来源于stack exchange,提问作者mylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.03 16:13:10