【问题标题】:Strange IIS Windows Authentication behavior奇怪的 IIS Windows 身份验证行为
【发布时间】:2011-01-01 07:54:17
【问题描述】:

我有一个 ASP.NET 3.5 Web 服务(旧式 SOAP,而不是 WCF)在 IIS 6.0 中设置相同的两台服务器上运行。身份验证/访问控制设置如下:

  • 启用匿名访问 = False
  • 集成 Windows 身份验证 = True
  • Windows 域服务器的摘要式身份验证 = False
  • 基本身份验证 = 假
  • .NET Passport 身份验证 = False

在其中一种网络方法中,我需要获取请求用户的身份并验证它是否在某个 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

【问题讨论】:

    标签: asp.net web-services authentication iis-6


    【解决方案1】:

    我正在创建一个新的 MVC 4 ASP.NET Web 应用程序,并在我第一次尝试构建我的项目时遇到了与您完全相同的错误(错误 401.2)。

    我在我的开发机器上更改了 IIS 管理器中的选项以禁用匿名身份验证并启用 Windows 身份验证,但我仍然收到 401.2 错误。

    我做了一些研究,发现我可以更改项目的属性并解决此错误。

    解决方案资源管理器:

    • 选择您的项目
    • 按 F4 显示属性窗口

    属性窗口:

    • 将“匿名身份验证”更改为“禁用”
    • 将“Windows 身份验证”更改为“启用”

    如果它不能解决您的特定问题,我希望这对其他人有所帮助。只要您在 Web 服务器上具有相同的设置,它就应该按预期工作。

    【讨论】:

    • 为我工作,谢谢。奇怪的是,当您选择使用 Windows 身份验证的“Intranet 站点”MVC 模板时,它从一开始就没有这样设置。
    • 非常感谢。如此简单的事情......同意 Lefty - 如果设置是通过 Intranet 站点自动调整的,那将是有意义的。
    【解决方案2】:

    我在虚拟服务器上遇到了与 IIS7 相同的问题,我的登录名指向一个名为“content”的文件夹。在我的网络配置中,有一个“位置”部分包含表单身份验证设置。但是我将其设置为 Windows 身份验证,因此当 IIS 访问我的内容文件夹时,它不知道要使用哪种身份验证,因此返回了错误。从配置中删除它后,它工作正常:

    <location path="content">
        <system.web>
            <authorization>
                <deny users="?" />
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
    

    谢谢

    【讨论】:

      【解决方案3】:

      不幸的是,我从来没有找到这个问题的根源。我们最终搬到了新的服务器上,并且在两者上都使用了新的 IIS 配置,这个问题就消失了。我怀疑这可能与在服务器上设置 NIC 的方式有关,因为它是具有多个 NIC 的虚拟服务器。但我仍然不确定。再次感谢 Heinziconsultutah 的帮助。

      【讨论】:

      • 可能从根 webconfig、machine.config 或其他继承配置差异?
      【解决方案4】:

      由于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>
      

      【讨论】:

      • web.config 都没有 authorization 部分。我准确地添加了你发布的内容。现在,Server1 的行为相同(正确),Server2 抛出 401.2 Unauthorized 异常。我将使用此信息更新原始帖子。
      • 感谢您的更新。在这种情况下,Windows 身份验证 由于某种原因而失败。由于 Server2 不能再回退到匿名访问,因此会引发错误。您的客户端配置正确吗?看看这个文件:msdn.microsoft.com/en-us/library/bfazk0tb.aspx
      • 是的,客户端配置正确。实际上,这些是“测试”服务器,所以我在两台服务器上都使用了 Web 服务测试表单。但是实际的客户端正在冒充域用户并且会出现相同的结果。
      • 谢谢。 :-) 嗯...客户端和 server2 在同一个域中,对吧?
      • 没错。所有客户端、server1 和 server2 都在同一个域中。
      【解决方案5】:

      在Server2的web.config中,是否有:authentication mode="Windows"?

      【讨论】:

      • 是的,两个 web.config 都有这个。
      • 还有几件事要检查: 1. 验证虚拟目录和任何内部目录上的“启用匿名访问”是否为假。 2. 内部目录中还有其他 web.config 吗?
      • 我在 Server2 上发现了一些启用了匿名访问的虚拟目录,并纠正了这个问题。我还检查了内部目录中的所有 web.config 文件,所有文件都设置为“Windows”,没有其他重要因素。问题仍然存在。 Server2 的 Web 服务与其他允许匿名访问的网站共享一个应用程序池。这可能是问题的一部分吗?
      • 我更改了应用程序池设置,使其与 Server1 相同,但它仍在发生,所以我猜这也是。
      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多