【问题标题】:WCF windows authentication when domain controller is not accessible无法访问域控制器时的 WCF Windows 身份验证
【发布时间】:2018-10-05 20:31:34
【问题描述】:

我有一个使用 Windows 身份验证的 WCF 服务: 此服务可通过https://subdomain.mydomain.com/MyService.svc 获得 目前的配置是:

  <netTcpBinding>
    <binding  name="SecureNetTcpBinding">
      <security mode="Transport">
        <transport clientCredentialType="Windows" />
        <message clientCredentialType="Windows" />
      </security>
    </binding>
  <netTcpBinding>

客户端使用 SPN 对服务器进行身份验证 (spn:MyService/subdomain.mydomain.com)。

当用户通过 VPN 连接到域时,身份验证工作正常。但是当VPN断开时,他无法连接:错误信息说找不到域控制器:

System.ServiceModel.Security.SecurityNegotiationException: A call to SSPI failed, see inner exception. ---> System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The system cannot contact a domain controller to service the authentication request. Please try again later

那么有人可以告诉我是否有可能使这种情况成为可能吗?

更新 1: 我想要的场景是在浏览器中使用 windows 身份验证:浏览器发送 windows 身份验证,并且不需要与域控制器建立连接。它适用于 VPN 关闭。

【问题讨论】:

  • 我相信这是一个网络问题,但这里有一个简短的提示——“不”。听起来该域只是一个“内部”域,并且网络/防火墙/基础设施不允许从本地网络外部连接到该域。您必须与您的网络团队合作探索替代方案。
  • 编辑了我的问题:我想要的场景是在浏览器中使用 windows 身份验证:浏览器发送 windows 身份验证,并且不需要连接到域控制器。它适用于 VPN 关闭。
  • 那种没有意义吧?您将如何向浏览器无法与之通信的域控制器进行身份验证?
  • 因为笔记本电脑属于域-事件当前未连接到-并且服务器可以与域通信。对于网络应用程序,它已经在浏览器中开箱即用,所以我的问题只是想知道是否可以使用 WCF 来实现。这是一个 WCF 特定问题,而不是网络或体系结构问题。

标签: c# wcf windows-authentication wcf-binding nettcpbinding


【解决方案1】:

实际上,我认为答案隐藏在您的问题中。 由于 SPN 需要一些配置才能工作 (check this),所以当 VPN 连接时,该配置工作正常,而断开连接时则不行。

您的问题在于与身份验证服务 (check this too) 的连接。当你说浏览器工作时,我假设第三方应用程序不能工作?

继续这个假设并且由于浏览器工作正常(我假设您通过启用的网络浏览器测试方法接口调用 wcf 端点),请检查浏览器是否正在使用某些代理。也可以从不同的网络浏览器进行检查。

一个认为值得做的是尝试使用soapui或其他soap wcf功能应用程序在VPN关闭的情况下调用该服务,看看会发生什么。 此外,检查任何可能不允许未知代理或应用程序通过您的 SPN 的防火墙设置。在客户端和服务器端。

这是开始调查的好时机。

【讨论】:

  • 我认为你是对的,问题应该来自 SPN。但我不知道如何解决这个问题。我正在尝试使用 dns 身份(而不是 spn)对其进行配置,但它不起作用。关于浏览器,这只是“无需 DC”来回答先前评论的一个示例。浏览器只需使用默认的 http windows auth 在与 WCF 相同的 IIS 应用程序中调用 api。
  • 据我了解,您无法使用 SPN 做某事。 Windows 没有使用任何身份验证,浏览器(例如 IE)本机支持 Windows 身份验证,并且服务器也设置为支持此身份验证类型。因此,您的 wcf(在运行的客户端上)应该使用正确的配置来支持 Windows 身份验证,并且它将运行的进程下的用户应该与您在使用浏览器时尝试的用户相同。如果您有 Windows 服务,它应该在授权用户下运行。如果你愿意,请给我更多关于你案件的细节。
猜你喜欢
  • 2020-07-17
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多