Windows身份验证在IISExpress中有效,但在IIS中无效

htrmnn0y  于 2022-11-12  发布在  Windows
关注(0)|答案(1)|浏览(148)

我遇到了一个奇怪的问题。我正在Visual Studio 2013中使用最新的MVC5。我正在尝试创建一个托管匿名API的站点,以及一个需要通过Windows身份验证的Intranet域凭据的管理 Jmeter 板。通过IIS Express运行时一切正常,就像我所期望的那样,但在真实的的IIS中托管时却不正常。
当托管在真实的IIS中时,它会给我一个登录框,就像我期望的管理员部分一样,但它不接受我的登录,并不断提示我。我知道这肯定是正确的用户名和密码。你知道为什么会发生这种情况吗?
我在Windows功能中安装了Windows身份验证,并在IIS中为站点打开了Windows身份验证。
下面是我的设置..

[Authorize]
public class DashboardController : Controller

<add key="EnableSimpleMembership" value="false" />

<authentication mode="Windows"/>
<authorization>
   <allow users="?" />
</authorization>
</system.web>
  <location path="gsapi">
    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="true"/>
          <windowsAuthentication enabled="true"/>
        </authentication>
      </security>
    </system.webServer>
  </location>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

bmp9r5qi

bmp9r5qi1#

有一个安全功能会试图拦截对服务器的反射攻击。这些攻击基本上是一种“中间人”攻击,攻击者对两个试图进行身份验证的参与系统执行质询-响应协议。
当您的服务器使用Map到回送地址的主机名时,试图保护您免受这些攻击的安全功能无法区分合法请求和欺诈请求。其症状是所有质询响应尝试都将失败。
您可以选择在注册表中指定主机名或禁用环回检查(不推荐)。
评论中链接的知识库文章提供了有关如何更改以解决此问题的具体说明:http://support.microsoft.com/kb/896861

--编辑日期:2022年8月31日--

原来的MSKB URL现在已经过期,但幸运的是,它在此之前已经存档:
https://web.archive.org/web/20140212102642/http://support.microsoft.com/kb/896861
上面写着:

当您浏览使用集成身份验证并且承载在IIS 5.1或更高版本上的网站时,收到错误401.1

有两种方法可以解决此问题,请根据您的具体情况使用以下方法之一。
**方法1:**指定主机名(如果需要NTLM身份验证,则为首选方法)

要指定Map到环回地址并可以连接到计算机上的网站的主机名,请按照下列步骤操作:

  • DisableStrictNameChecking注册表项设置为1。
  • 有关如何执行此操作的更多信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:

281308连接到基于Windows 2000或Windows Server 2003的计算机上的SMB共享可能无法使用别名

  • 单击开始,单击运行,键入regedit,然后单击确定
  • 在注册表编辑器中,找到并单击以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\当前控制集\控制\Lsa\MSV1_0
  • 以鼠标器右击按一下[MSV1_0],指向[新增],然后按一下[多字串值]。
  • 键入BackConnectionHostNames,然后按Enter键。
  • BackConnectionHostNames上按一下鼠标器右击,然后按一下修改
  • 在"数值数据“框中,键入主机名或本地计算机上站点的主机名,然后单击”确定“。
  • 退出注册表编辑器,然后重新启动IISAdmin服务。
    **方法2:**禁用环回检查(不太推荐的方法)

第二种方法是通过设置DisableLoopbackCheck注册表项来禁用环回检查。
要设置DisableLoopbackCheck注册表项,请按照下列步骤操作:

  • DisableStrictNameChecking注册表项设置为1。
  • 有关如何执行此操作的更多信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:

281308连接到基于Windows 2000或Windows Server 2003的计算机上的SMB共享可能无法使用别名

  • 单击开始,单击运行,键入regedit,然后单击确定
  • 在注册表编辑器中,找到并单击以下注册表项:HKEY_本地计算机\系统\当前控制集\控制\Lsa
  • 以鼠标器右击按一下[Lsa],指向[新增],然后按一下[DWORD值]。
  • 键入DisableLoopbackCheck,然后按Enter。
  • 右键单击DisableLoopbackCheck,然后单击修改
  • 数值数据框中,键入1,然后单击确定
  • 退出注册表编辑器,然后重新启动计算机。

相关问题