Windows“表单”身份验证 - <deny users =“?”>重定向到外部页面!</deny>

时间:2010-08-11 21:21:19

标签: asp.net forms authentication web-config

与标题状态一样 - 我有一个看起来像

的web.config文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
         <forms name="login" protection="All" timeout="30" loginUrl="login" defaultUrl="~/">
              <credentials passwordFormat="Clear">
                   <user name="admin" password="password" /> 
              </credentials>
         </forms>
        </authentication>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

我想做它应该做的事情......我想拒绝所有试图进入该网站的用户。

然而,它有效,它重定向到“帐户/登录?ReturnUrl =%2flogin”我从未听说过的网址...

我可以改变这个地方吗?

4 个答案:

答案 0 :(得分:2)

我以前见过这个问题。毫无疑问,你也会收到这个错误:

  

错误消息401.2。:未经授权:由于服务器配置,登录失败。验证您是否有权根据您提供的凭据和Web服务器上启用的身份验证方法查看此目录或页面。请与Web服务器的管理员联系以获取其他帮助。

您被重定向到“/ Account / Login”,甚至不存在。我相信,由于使用MVC组件,即使您使用的是ASP.NET Forms网站,也会出现某种默认情况。也许您有一些Razor页面,并且以下内容已添加到您的web.config中:

<appSettings>
    <add key="webpages:Enabled" value="true" />
</appSettings>

在这里有这样的东西似乎足以弄乱你正常定义的登录页面:

<authentication mode="Forms">
  <forms loginUrl="login" timeout="43200"/>
</authentication>

我通过向appSettings添加额外的“loginUrl”键来解决这个问题:

<appSettings>
    <add key="webpages:Enabled" value="true" />
    <add key="loginUrl" value="~/Login.aspx" /><!-- Override default -->
</appSettings>

答案 1 :(得分:1)

loginUrl param没有绝对路径,因此路径与网站的相关文件夹混合在一起。

解决方案:

loginUrl="~/login"

loginUrl="/login"

答案 2 :(得分:0)

问题是

loginUrl="login"

这是发送未经身份验证的用户的URL。如果登录页面的URL是“Login.aspx”,那么你也应该设置它。

loginUrl="login.aspx"

最后一块,ReturnURL,是用户成功登录时重定向的地址。

答案 3 :(得分:0)

使用代码UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, loginUrl);创建LoginUrl,因此我猜测您的网站根目录设置为“应用程序”。

http://www.ureader.com/msg/15372322.aspx