我在IIS 6.0中设置相同的两台服务器上运行ASP.NET 3.5 Web服务(旧学校SOAP,而不是WCF)。身份验证/访问控制设置如下:
在其中一种Web方法中,我需要获取请求用户的身份并验证它是否在某个Active Directory组中。因此,Web方法中的第一行代码是:
var requestUser = HttpContext.Current.Request.LogonUserIdentity.Name;
由于某种原因,两台服务器之间的结果不同。 Server1按预期工作,生成domain\UserId
。但是,Server2生成Server2\IUSR_SERVER2
。有谁之前经历过这个吗?我找到this question,但我很确定它不适用于客户端,两个服务器都在同一个域中。
根据Heinzi的回复,我将以下内容添加到两个web.config文件中的<system.web>
部分:
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
现在,Server1的行为相同,因为它的行为与我想要的一样。但是,Server2抛出401.2:Unauthorized错误:
>应用程序中的服务器错误。访问被拒绝。 描述:访问提供此请求所需的资源时发生错误。可能未配置服务器以访问请求的URL。
错误消息401.2。:未授权:由于服务器配置,登录失败。验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面。请与Web服务器的管理员联系以获取其他帮助。
版本信息:Microsoft .NET Framework版本:2.0.50727.3603; ASP.NET版本:2.0.50727.3053
答案 0 :(得分:9)
当我第一次尝试构建项目时,我正在创建一个新的MVC 4 ASP.NET Web应用程序并遇到与您完全相同的错误(错误401.2)。
我在开发计算机上更改了IIS管理器中的选项以禁用匿名身份验证并启用Windows身份验证,但我仍然收到401.2错误。
我做了一些研究,发现我可以更改项目的属性并解决此错误。
解决方案资源管理器:
- 选择您的项目
- 按F4显示“属性窗口”
属性窗口:
- 将“匿名身份验证”更改为“已禁用”
- 将“Windows身份验证”更改为“已启用”
如果没有解决您的具体问题,我希望这有助于其他人。只要您在Web服务器上具有相同的设置,它就应该按预期工作。
答案 1 :(得分:2)
在Server2上的web.config中,你有:身份验证模式=“Windows”吗?
答案 2 :(得分:2)
由于IUSR_*
是默认的匿名用户,并且在IIS中禁用了匿名访问,因此听起来在您的web.config中启用了匿名访问。请确保web.config中的authorization
部分与此类似:
<authorization>
<deny users="?" /> <!-- Reject anonymous users -->
<allow users="*" /> <!-- Accept all other users (or replace * with a list of users) -->
</authorization>
答案 3 :(得分:1)
我在虚拟服务器上遇到了与IIS7相同的问题,我的登录指向一个名为“content”的文件夹。在我的网络配置中,有一个包含表单验证设置的“位置”部分。但是我正在为Windows身份验证进行设置,所以当IIS点击我的内容文件夹时,它不知道要使用哪种身份验证,因此返回错误。从配置中删除它后它工作正常:
<location path="content">
<system.web>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</location>
由于
答案 4 :(得分:0)
不幸的是,我从来没有找到这个问题的根源。我们最终转移到新的服务器并且两者都有新的IIS配置,这个问题就消失了。我怀疑它可能与在服务器上设置NIC的方式有关,因为它是具有多个NIC的虚拟服务器。但我还是不确定。再次感谢Heinzi和consultutah的帮助。