我有一个 asp.net mvc 4.0 Web 应用程序,它尝试使用 Windows 身份验证来针对某些 Web 服务进行身份验证。它托管在 iis7 中
Web 服务是 Autodesk Vault 2011 Web 服务,我向用户展示了一个登录屏幕,他们可以在其中使用 Vault 用户帐户,也可以使用他们的 Windows 登录。使用保险库帐户没有问题,它通过保险库 Web 服务登录并调用各种保险库 Web 服务,例如从保险库中提取数据。这里没有问题
尝试使用 Windows 身份验证登录时,访问 Web 服务时出现 401 错误
我认为这可能是双跳问题,因此服务器管理员将启用 Kerberos,因此我们至少可以消除这种可能性。在实时环境中,站点和 Web 服务位于不同的服务器上。
但是对于测试,我有一个虚拟机设置,并且站点和 Web 服务在同一台机器上,但我仍然遇到 401 问题,所以这可能是 iis 配置问题,而不是最初认为的双跳问题
我尝试了以下但没有成功
我已将以下代码添加到 winauthservice(我已经包装了 Web 服务,以便我可以覆盖调用,并且我创建了一个工厂类来实例化服务)
this.UnsafeAuthenticatedConnectionSharing = true;
var credentialCache = new CredentialCache();
credentialCache.Add(new Uri(this.Url), "NTLM", new NetworkCredential(identity.Name, identity.Password.ConvertToUNSecureString(), identity.Name.Substring(0, identity.Name.IndexOf("\\", StringComparison.OrdinalIgnoreCase))));
this.Credentials = credentialCache;
我也尝试过使用 Negotiate 而不是 NTLM
我已禁用注册表中的环回检查,并将服务器名称和 localhost 添加到 BackConnectionHostNames 注册表项
我在 iis 中禁用了网站的匿名身份验证并启用了 windows 身份验证。在 Windows 身份验证的提供程序中,我已经删除了协商,只是离开了 NTLM,因为看到了一个建议这样做的帖子。
在 web.config 我设置了身份验证mode = windows
我的 IIS 日志中有以下内容
2013-09-25 09:11:05 fe80::9565:6102:fe2d:8f41%10 POST /AutodeskDM/Services/WinAuth/WinAuthService.asmx - 80 - fe80::9565:6102:fe2d:8f41%10 Mozilla/ 4.0+(兼容;+MSIE+6.0;+MS+Web+Services+Client+Protocol+4.0.30319.296) 401 2 5 11572 2013-09-25 09:11:05 fe80::9565:6102:fe2d:8f41% 10 POST /AutodeskDM/Services/WinAuth/WinAuthService.asmx - 80 - fe80::9565:6102:fe2d:8f41%10 Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web+Services+Client+Protocol+ 4.0.30319.296) 401 1 3221225581 10
对于现在可能出现的问题,我已经没有什么想法了,但我的想法是,如果我可以在我的测试虚拟机中让它工作,那么我可能在实时环境中会有更多的运气