如何在IIS上的HTTP挑战后重定向到原始请求?

时间:2014-01-03 20:21:52

标签: asp.net-mvc iis iis-7 nuget basic-authentication

运行ASP.NET MVC 4应用程序的IIS 7。我已在IIS中为网站启用了基本身份验证,并禁用了所有其他身份验证类型。当用户到达站点时,会向他们显示auth challenge弹出窗口,他们使用其域凭据进行身份验证。

但是,在成功验证后,它们将被重定向到`/login.aspx?ReturnURL=originalPath。

理想情况下,我希望重定向将其发送回原始请求的网址。我怎么能这样做?

为了更具体地说明我要完成的工作,我们在http://nuger.ourdomain.com/nuget运行了一个内部NuGet Feed。 NuGet支持基本身份验证。但是,由于此错误的重定向,我的nuget.exe install命令失败。 e.g。

https://nuget.ourdomain.com/nuget -> password challenge
-> redirects to https://nuget.ourdomain.com/login.aspx?ReturnUrl=%2fnuget
-> Returns 404 Not Found because there is no login.aspx on this MVC app
-> NuGet sees the 404 and sees that something failed, 
   so prompts for passsword again, ad infinitum

如果我在浏览器中浏览https://nuget.ourdomain.com/nuget,我可以直接看到此行为 - 我获得了auth挑战,然后重定向到/login.aspx?ReturnUrl=%2fnuget。此时,如果我手动转到我的原始目标网址,它会正常加载。

使用基本身份验证方法可以将正确的重定向恢复到原始请求网址吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,启用ASP.NET MVC启用的表单身份验证,因此即使我没有在IIS中启用它,也没有在我的web.config中启用它,它仍然被使用。我不得不将以下内容添加到我的web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthentication" />
    </modules>
<system.webServer>

然后它停止重定向到login.aspx。而且,奖金,它似乎与NuGet一致!