【问题标题】:ASP.NET WebForms Url authorization and an infinite loop. Web.config not working?ASP.NET WebForms Url 授权和无限循环。 Web.config 不工作?
【发布时间】:2014-06-04 01:59:32
【问题描述】:

我创建了一个使用 ASP.NET 身份来实现用户帐户功能的网站。 我想使用标准 url 授权限制对特定文件夹(“帐户”)中所有页面的访问,但我的应用程序中的“登录”和“注册”除外。 未登录的用户应该只能打开“帐户/登录”和“帐户/注册”,并且经过身份验证的用户应该能够打开除这些页面之外的所有其他内容。

根 Web.config 没有授权规则,而我放在 Account 文件夹中的 Web.config 有:

<?xml version="1.0"?>
<configuration>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

  <location path="Login.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

  <location path="Register.aspx">
    <system.web>
      <authorization>
        <allow users="?"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

</configuration>

但是,有了这些规则,就会出现问题。请求该文件夹中的任何页面,包括“Login.aspx”,都会导致重定向到http://localhost:15284/Account/Login。正如我所说,即使请求“登录”页面也会重定向回自身,就像不允许用户一样,因此会创建无限循环。该循环会导致 HTTP 404.15,因为查询字符串超出了其长度限制(“?ReturnUrl=%2FAccount%2FLogin”会在每次重定向时附加到 URL)。

是我的规则不正确还是另有原因? 也许问题与 ASP.NET 身份有关? 或者这可能是由于 url 重写(在 VS 2013 WebForms 模板中默认启用)而发生的?

如果没有 Web.config,网站当然可以工作,但每个人都可以访问我不想要的所有内容。

在此先感谢,对不起我的英语! :)

【问题讨论】:

    标签: c# asp.net webforms asp.net-identity


    【解决方案1】:

    试试

    <location path="Login.aspx">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
      </location>
    

    这应该允许未经身份验证的用户访问

    【讨论】:

    • 没有帮助,这也不是问题的根源。
    【解决方案2】:

    使用文件夹“帐户”,或创建另一个文件夹,其中可以插入您希望匿名用户访问的页面,其所有者 web.config 包含以下配置:

    <configuration>
        <system.web>
            <authorization>
                <allow users="?"/>
            </authorization>
        </system.web>
    </configuration>
    

    如你所见,不使用“位置”标签

        <location path="Login.aspx">
    

    而在根 web.config 中,它仍然是这样的:

    <authorization>
        <deny users="?"/>
    </authorization> 
    

    这是一种解决方法,因为如本文所述:http://msdn.microsoft.com/en-us/library/wce3kxhd.aspx “应用程序级配置文件中包含的规则优先于继承的规则。 系统通过为 URL 构建所有规则的合并列表来确定哪个规则优先,最近的规则(在层次结构中最近的规则)位于列表的头部”

    【讨论】:

      【解决方案3】:

      有点老线程,但我希望这会有所帮助,至少有人。 到 /Account/Login 的重定向来自 Startup.cs,默认情况下如下:

      public class Startup
      {
          public void Configuration(IAppBuilder app)
          {
              app.UseCookieAuthentication(new CookieAuthenticationOptions
              {
                  AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                  LoginPath = new PathString("/Account/Login")
              });            
          }
      }
      

      因此,请将LoginPath = new PathString("/Account/Login") 替换为您的登录路径。

      我曾为同样的问题苦苦挣扎过一段时间,但现在可以了..

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多