【问题标题】:web.config authorization deny unauthorisedweb.config 授权拒绝未经授权
【发布时间】:2011-04-21 22:07:09
【问题描述】:

我正在为 ASP.NET Web 应用程序开发 .NET,并试图拒绝所有未经授权的用户访问我的应用程序,但只允许他们访问登录页面。

下面是我的 system.web 部分中的代码的 sn-p:

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="60" name="APPNAME" slidingExpiration="true" />
</authentication>
<authorization>
   <deny users="?" />
</authorization>

我也有这个外部允许访问登录页面:

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

但是,当我没有登录时,我仍然可以访问页面,我该如何阻止这种情况发生?

我什至在 Main 文件夹中添加了一个 Web.Config 文件,该文件夹存储了大部分网站文件,其内容是:

<?xml version="1.0"?>
<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

但这仍然没有任何效果。

解决方案

我遵循了一些针对 asp.net (http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx) 的优化技巧,并删除了我真正需要的 AnonymousIdentification httpModule。

【问题讨论】:

  • 你确定你没有登录吗?您不只是在您的计算机上仍然存在身份验证 cookie,还记得您上次登录吗?
  • 我刚刚清除了浏览器缓存/cookies 并再次尝试,它仍然允许我访问所有内容

标签: .net asp.net .net-4.0 authorization


【解决方案1】:

我想您会发现,如果您将具有不同预期角色的不同网页放在不同的文件夹中,则处理 ASP.NET 授权要容易得多。这不是一个要求。只是更容易管理。

如果您使用的是 VS 2010(我不确定这是不是在速成版中),请尝试使用项目菜单底部的 ASP.NET 配置工具。

我发现首先使用该工具很容易了解 web.config 文件的工作原理,对安全性进行一些更改,然后查看它的作用。

如果您只是从 VS 2010 中的空白 ASP.NET 应用程序开始,您可以通过进行两项更改来锁定除登录和注册页面之外的所有内容:

在根 web.config 中

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

在帐户子文件夹的 web.config 中

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

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

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

</configuration>

您会看到用户立即被定向到登录页面,但他们仍然可以注册。

【讨论】:

    【解决方案2】:

    尝试将LoginStatus 控件添加到您的页面以检查您的登录状态。

    您之前可能已经检查过“保存的密码”选项。使用control userpassword2 命令检查并清除您的缓存密码。

    【讨论】:

    • 我已经添加了这个,它会生成一个登录链接。所以我绝对没有登录。我会查看我的代码/web.config 是否有任何问题。
    • 我已修复 - 请参阅上文了解我的解决方案
    • 多么长的文章啊。总之干得好。 :)
    【解决方案3】:

    您可以在需要应用权限的文件夹中放置一个新的 Web.config。在里面做这样的事情

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.web>
            <authorization>
                <deny users="?" />
            </authorization>
        </system.web>
    </configuration>
    

    或者您可能需要用&lt;security&gt; 标记包装&lt;authorization&gt; 标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多