27

我正在 ASP.NET MVC 3 Beta 中创建一个 Intranet 站点,并希望专门使用 Windows 身份验证。另外,我想在VS2010中使用Visual Studio Development Server。

我修改了默认的 web.config 文件以删除对表单身份验证的所有引用并切换到此:

<authentication mode="Windows"  />
<authorization>
  <deny users="?" />
</authorization>

但是,当我启动我的网站并获得默认页面时,我会收到以下回复:

HTTP/1.1 302 Found
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 02 Nov 2010 14:05:19 GMT
X-AspNet-Version: 4.0.30319
Location: /Account/Login?ReturnUrl=%2f
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 145
Connection: Close

这导致我的浏览器中出现此消息:

“/”应用程序中的服务器错误。

无法找到该资源。

说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/Account/Login

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.1 版本:4.0.30319.1

如果我在“使用 Visual Studio 开发服务器”下的项目属性中选择“NTLM 身份验证”,那么我在连接时正确得到以下回复:

HTTP/1.1 401 Unauthorized Server
ASP.NET Development Server/10.0.0.0
Date: Tue, 02 Nov 2010 14:07:37 GMT
Content-Length: 1211 
WWW-Authenticate: NTLM

但是当我进行身份验证时,我得到了 302

我认为这只是清除一些默认值的问题,但不确定(“/Account/Login”没有出现在我的 web.config 文件中的任何位置)。如果我删除“拒绝”部分,那么一切正常,除了我没有获得经过身份验证的委托人并且有效地保持匿名。

我相信这曾经在 ASP.NET MVC 2 和 VS2008 中工作,只需将身份验证模式更改为 Windows,但它似乎不再那样工作了。

我知道我可能缺少一些基本的东西。谢谢!

注意:这个问题类似于“限制匿名访问 ASP.Net MVC 站点的问题”问题,但不同之处在于我想专门使用 Windows 身份验证。

4

3 回答 3

38

我有完全相同的问题。事实证明,MVC 3(也隐藏得相当好)有一个更改,默认情况下会自动启用 Forms 身份验证,为了禁用它,将以下行添加到您的根 Web.config 文件中,在appSettings密钥下...

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

希望有帮助!

于 2010-11-02T15:49:13.310 回答
15

仅供参考,以防这对其他人有所帮助:就我而言,我只需要添加 <add key="enableSimpleMembership" value="false">即可解决问题,并且<add key="autoFormsAuthentication" value="false" />不是必需的。我还发现这篇博文作为解释非常有用http://www.codeproject.com/Articles/292149/The-resource-cannot-be-found-Account-Login?msg=4092212#xx4092212xx

关于此修复的潜在后果/副作用的任何想法?

我也很失望这个问题在一年后还没有被 ms 修复。

谢谢。

于 2011-12-01T07:00:51.360 回答