C++ 为什么WinInet在通过FQDN连接时无法通过协商自动进行身份验证,但在通过IP连接时会成功?

C++ 为什么WinInet在通过FQDN连接时无法通过协商自动进行身份验证,但在通过IP连接时会成功?,c++,wininet,spnego,C++,Wininet,Spnego,有一个奇怪的问题,如果我按名称连接到内部服务,WinInet无法使用用户当前凭据进行身份验证,但如果我按IP连接,则无法进行身份验证 在我们的一个环境中,它位于自己的域DOM1中,我们的客户机可以使用服务器的名称(即)连接到我们的WCF服务 在另一个环境中,在域DOM2中,客户机可以使用自动身份验证,但如果我们将客户机配置为使用机器名进行连接,它将连接,但无法使用集成安全性进行身份验证。我们最终不得不求助于我们想要避免的基本方法 也就是说,我们可以切换到使用IP号码进行连接,但这对我来说没有任何

有一个奇怪的问题,如果我按名称连接到内部服务,WinInet无法使用用户当前凭据进行身份验证,但如果我按IP连接,则无法进行身份验证

在我们的一个环境中,它位于自己的域DOM1中,我们的客户机可以使用服务器的名称(即)连接到我们的WCF服务

在另一个环境中,在域DOM2中,客户机可以使用自动身份验证,但如果我们将客户机配置为使用机器名进行连接,它将连接,但无法使用集成安全性进行身份验证。我们最终不得不求助于我们想要避免的基本方法


也就是说,我们可以切换到使用IP号码进行连接,但这对我来说没有任何意义。

您的DNS似乎没有将您的服务器url解析为与NetBIOS名称相同的IP

也许你有一个外部IP?调查您的网络流量并跟踪步骤。 此外,查看NetBIOS可能有助于了解问题以及从何处开始查找问题:


你可以分析网络流量。我认为这不是问题所在。IP地址解析正确。我知道,因为当通过“协商”进行身份验证失败时,我们的应用程序会使用相同的URL使用基本身份验证,并且能够连接。您发现服务器并不一定意味着您使用相同的IP地址访问它。由于DNS和NetBIOS产生不同的结果,它们解析的地址是检查imho的第一个位置。另一方面,如果通过URL进行身份验证有效,为什么不直接使用它呢?问题是,如果您使用服务器的名称,那么通过协商进行的身份验证不起作用,但是basic使用相同的URL进行身份验证,这意味着该名称确实解析为正确的IP号。如前所述,WinInet可以使用名称或IP进行连接,但由于某些原因,WinInet在使用名称时无法使用“协商”进行身份验证。