我认为这个问题与软件开发关系不大,而与一般网络配置关系更大,所以我首先在这里发布这个问题。
我在 Windows 2008 R2 服务器上的 IIS 7.5 中托管了一个 MVC4 应用程序(我们称之为WS1
)。它正在使用第二台相同服务器(WS2
)上的 WCF 服务。还WS2
安装了 SharePoint 2007。WCF 服务与 SharePoint 交互,因此需要以有权访问我的 SharePoint 网站的用户身份运行。因此,WCF 服务设置为使用 Windows 身份验证,并以 NTLM 作为唯一的 Windows 身份验证提供程序(SharePoint 所需)。上的 MVC4 应用程序WS1
也设置为 Windows 身份验证,以 NTLM 作为唯一提供程序,并具有匹配的 WCF 端点安全设置:
<binding name="SpBasicHttp" ... >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
</security>
</binding>
WS1
都是WS1
虚拟机,虽然它们不一定位于同一主机上,但它们是在同一个域上。
WS1
现在,当我尝试从调用 Web 服务方法时WS2
,收到以下错误:
Sharepoint Web 服务 — HTTP 请求未获得客户端身份验证方案“Ntlm”的授权。从服务器收到的身份验证标头为“NTLM”
真恶心。因此,我打开了 NTLM 审核WS2
,发现在调用 Web 服务期间,基本上没有 NTLM 身份验证请求到达该服务器。
现在,如果我将 MVC4 应用程序部署到WS2
并且除了 WCF 服务端点 URL 之外不做任何更改,一切都很完美通过 NTLM 进行的 Windows 身份验证运行完美,并且在事件查看器中清晰可见 NTLM 身份验证审核条目。它看起来像:
Audit NTLM authentication in this domain
User: billybob
Domain: xyz
Workstation: MY-COMPUTER-NAME
PID: 4
Process:
Logon type: 3
InProc: true
Mechanism: (NULL)
两台机器上都没有阻止出站或入站 NTLM 请求的组策略设置。我正在开发的网络没有为 Kerberos 设置,所以很遗憾这不是一个选项。我也没有对 Active Directory 的任何访问权限。
因此,从服务器管理的角度来看,什么会阻止 NTLM 身份验证请求在两台服务器之间运行,而它在单台服务器上却能正常工作?
类似问题: