使用Traefik和集成的Windows身份验证进行零星登录

时间:2019-02-02 02:23:40

标签: traefik iwa

我在让Traefik代理使用集成Windows身份验证(IWA)保护的代理应用程序时遇到问题。当被服务的内容是一个简单的IIS与IWA确保虚拟目录是没有问题的。但是,当它是.NET Core应用程序或MVC应用程序,甚至只是一个简单的Default.aspx页面并且启用了IWA时,我会不断收到提示以提示我输入凭据(从未接受)。有关我的配置,请参见以下内容:

Traefik Configuration:

  # ns-ws
  [frontends.ns_ws]
  passHostHeader=true
  entrypoints=["http","https"]
  backend = "ns_ws"
    [frontends.ns_ws.routes.match_all]
    rule = "Host:ns-ws.example.com"

  [backends.ns_ws]
    # ns-ws
    [backends.ns_ws.loadbalancer.stickiness]
    [backends.ns_ws.servers.server1]
    url = "http://x.x.x.x:80"

我玩过删除通行证主机标头和粘性,但是没有运气。

好像是原始请求成功通过了,因为我没有从IIS收到该页面的未经身份验证的错误消息,但是大多数后续对服务器的请求将返回401(似乎是零星的)。

任何指导将不胜感激。谢谢!

Example ImageExample

我尝试更改IIS中的“ authPersistNonNTLM”选项,如此处所述:https://boyan.io/kerberos-load-balancers/(不走运)

1 个答案:

答案 0 :(得分:2)

我意识到这是一个非常陈旧的问题,但万一这可以帮助其他人。

我可以确认Windows集成身份验证使用TCP而不是HTTP路由器在Traefik 2.x上能够成功工作,并且在Windows / Mac上使用Safari / Chrome / IE证明了成功的登录成功。

请注意,在进行测试时,确保已清除cookie缓存非常重要,否则由于先前尝试登录的非工作配置可能会导致不可预测的结果,这一点很重要。确实,在重置浏览器之前,我反复遇到无法解释的登录提示,从而遇到了与您描述的行为类似的事情。

在我们的配置中,我们有一个混合操作系统的Docker Swarm(Linux / Windows),其中Traefik在Linux上运行,并将请求直接发送到在Windows swarm节点上运行的后端Windows容器。

如果您已经正确配置了Windows应用程序和容器,我可以通过以下方式进行确认:

  • 加入域的计算机,您将使用加入域的计算机的Kerberos凭据直接登录Windows后端容器
  • 未加入域的计算机连接将降级为Windows NTLM身份验证,并提示您输入Windows身份验证凭据。

从Traefik配置的角度来看,我们的Docker容器具有如下标签:

    - "traefik.tcp.routers.dotnet-tcpexample.entrypoints=websecure"
    - "traefik.tcp.routers.dotnet-tcpexample.tls=true"
    - "traefik.tcp.routers.dotnet-tcpexample.tls.options=default"
    - "traefik.tcp.routers.dotnet-tcpexample.rule=HostSNI(`windows.foo.bar`)"
    - "traefik.tcp.routers.dotnet-tcpexample.tls.passthrough=true"
    - "traefik.tcp.routers.dotnet-tcpexample.service=dotnet-tcpexample"
    - "traefik.tcp.services.dotnet-tcpexample.loadbalancer.server.port=443"

请注意,配置容器以进行Windows集成身份验证本身并非易事,但已记录在here中。