使用Windows身份验证访问Web服务时未经授权401

时间:2013-09-25 10:04:00

标签: c# asp.net-mvc web-services iis-7 http-status-code-401

我有一个asp.net mvc 4.0 Web应用程序,它试图使用Windows身份验证来对某些Web服务进行身份验证。它托管在iis7

Web服务是autodesk vault 2011 Web服务,我向用户显示登录屏幕,他们可以使用保管库用户帐户,也可以使用他们的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 +服务+客户端+协议+ 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 +服务+客户端+协议+ 4.0.30319.296)401 1 3221225581 10

关于现在的问题,我的想法已经不多了,但我的想法是,如果我可以在我的测试版中使用它,那么我可以在现场环境中获得更多运气

1 个答案:

答案 0 :(得分:0)

在使用HttpWebRequest对象时,我在使用重定向时仍然存在身份验证问题,但我不确定这是否是您的问题。我注意到使用Fiddler2重定向和缺少身份验证。

我必须做的是在PreAuthenticate = true对象

上设置HttpWebRequest
HttpWebRequest request;
request = (HttpWebRequest)WebRequest.Create(uri);
request.PreAuthenticate = true;
request.Credentials = new CredentialCache {{uri, "Basic", credentials}};

但是,就像我说的那样,我不确定这是否适用于你的情况。