【问题标题】:Windows "forms" authentication - <deny users="?"> redirecting to foreign page!Windows“表单”身份验证 - <deny users="?"> 重定向到外部页面!
【发布时间】:2011-03-28 15:17:23
【问题描述】:

如标题所述 - 我有一个 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”网址...

有什么地方可以改吗?

【问题讨论】:

  • 这里的问题是这个 URL: "Account/Login?ReturnUrl=%2flogin" 是从任何地方生成的......这似乎是一个默认的东西......我没有帐户文件夹而且我没有与帐户/登录名匹配的路线...

标签: asp.net forms authentication web-config


【解决方案1】:

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

错误消息 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>

【讨论】:

    【解决方案2】:

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

    解决方案:

    loginUrl="~/login"
    

    或

    loginUrl="/login"
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        问题是

        loginUrl="login"
        

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

        loginUrl="login.aspx"
        

        最后的 ReturnURL 是用户成功登录后重定向到的地址。

        【讨论】:

        • 其实问题不大。我使用 url 路由和 /login 是一个真实的位置。即使更改为本地文件名(login.aspx),我仍然会得到相同的“不受控制”重定向。
        • 这在我看来可能与您的 url 路由有关,或者至少值得调查。您可以发布路由的配置/代码吗?
        • 忘记路由...我相信不是...配置将我定向到此页面 localhost:1234/Account/Login?ReturnUrl=%2flogin the folder/page/variable /url/route "Account/Login" 在我的项目中根本不存在。我该如何覆盖这个?帐户/登录在哪里添加到混乱中?
        猜你喜欢
        • 1970-01-01
        • 2011-07-01
        • 2011-09-15
        • 1970-01-01
        • 2011-02-19
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多