asp.net 如何在web.config中使用authentication/authorization标记限制/允许特定页面?

s2j5cfk0  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(171)

我使用的是ASP.NET Webforms技术。我尝试在web.config中使用authentication/authorization标签来限制页面:

<authentication mode="Forms">
         <forms name=".ASPXLog" loginUrl="LoginPage.aspx"
             protection="All" path="/" timeout="30" /> 
</authentication>

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

此代码限制除LoginPage之外的所有页面。但我想限制特定的网页,并允许特定的网页访问者。例如,x1.aspx,x2.aspx,x3.aspx,x4.aspx页面应该被限制为访问者,只有那些应该看到谁登录或刚刚注册比页面y1.aspx,y2.aspx,y3.aspx,y4.aspx页面应该被允许所有访问者。如何正确地解决这个问题?

cngwdvgl

cngwdvgl1#

最好和可行的方法是不要把所有的垃圾放在“主”根Web配置文件(试图节省你不得不花几天时间,建筑物与美丽的绿色草坪,人们走在白色实验室外套,你花时间在一个房间与漂亮的填充墙壁)。
所以,这意味着我建议您为站点中的任何类型的分组创建一个文件夹(子文件夹)。
像这样说:

再往下看,我有这个:

所以,请注意我是如何在每个文件夹中放入一个Web配置文件。
这有巨大的优势。首先,我从来不需要关心或担心网页的路径名称。
在上面,我们看到一个承包商的文件夹。因此,只有那些登录到系统上的角色为“承包商”的人才能使用该子文件夹。
SiteAdmin文件夹也是如此。只有那些以“SiteAdmin”角色登录的用户才能使用该文件夹。
因此,当然需要特殊代码(后面)来保护这样的页面。
所以,Contractor文件夹的web配置看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Contractor" />
      <deny users="*" />
    </authorization>
  </system.web>
</configuration>

对于网站管理员,我们有这个:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.web>

  <authorization>
          <allow roles="SiteAdmin" />
      <deny users="*" />
      </authorization>
    <httpRuntime requestValidationMode="2.0" />

</system.web>

请注意,这样我们就不会有混乱的路径名,而且“安全性”就在那个文件夹后面。所以,假设我们移动文件夹(甚至复制它),那么我们就有了一个现成的web.config文件夹的安全设置。
因此,对于大多数登录的东西,用户必须能够登录没有提升的权利,所以帐户文件夹不能被锁定,否则用户将无法登录到该网站!!!
因此,我强烈建议将根文件夹向所有人开放,然后在登录时,打开并启用主菜单栏中的项目。
虽然用户可能具有或可能不具有菜单项,但是所有页面因此基于它们的安全角色而被保护。
所以,安全管理变得很容易,因为现在一切都是由一个文件夹和一个简单的web.config为每个文件夹。而不是一些长而巨大的意大利面条混乱的一堆路径名和硬编码页面在主根网络配置。
此设置支持轻松开发。
我想添加几个新的网页说"承包商"在网站上,然后我只是简单的右键单击承包商的文件夹,并创建/添加一个新的网页。如果你硬编码,并在根Web配置中有各种各样的页面以确保安全,那么每次你开始添加一些新页面等,你必须进行一些伟大的冒险探索,以追踪一些谁知道它们在哪里的Web配置!!!
忽略上面的内容,正如我所说的,您的项目将达到管理安全设置变得非常困难的程度。
以上所述?
好吧,好吧,一些特殊的例外可以放在主根web.config中来设置和保护一些网页,但我不会养成这样做的习惯。
将安全部分(按角色)分组到文件夹中,这样您就可以为每个这样的文件夹设置/更改/享受SINGLE和SIMPLE安全设置。然后,您或其他开发人员现在可以自由地简单地添加新页面到网站,并基于您添加新页面的文件夹,然后他们将已经为您保护。
请注意,您最近访问的10,000或20,000个网站?它们都允许您进入网站,登陆主页,然后选择登录或注册。或者查看诸如“关于”之类的东西。
因此,根页面应该是公共的,因此,根文件夹中很少有页面存在。再一次,然后为每个子文件夹采用web.config现在可以轻松管理您想要保护的所有页面。如果你作为一个开发人员必须开始输入每个页面以保护一些web.config文件,正如我所说的,你会发现自己花时间在一个美丽的机构与漂亮的绿色草坪,房间与填充墙。
因此,按文件夹对页面进行分组,并将一个web.config应用于该子文件夹。
有了上面的说明,在主菜单(可能是母版页)中显示/隐藏菜单选项就变得很好和简单了。
所以,当用户点击网站时,他们说看到这个:

显示如何登录或获取登录等信息。
但是,用户登录后?
他们看到这个:

现在,虽然我的母版页是否会根据角色安全性打开菜单项?这并不重要,因为即使用户输入URL并忽略菜单,所有这些页面都是安全的,我晚上睡得很好,因为我没有错过某个地方的一个小页面安全设置。
因此,将需要安全保护的页面移出文件夹,然后按文件夹进行安全保护。如果您开始逐页地保护安全,那么您将不会收到任何好处,因为IIS管理您的安全性,而不是手动编码安全性,或者在您的情况下手动编码每个页面的安全性。
现在,我有相当多的页面,重定向和跳转用户到网站上的不同位置,这是通过后面的代码来完成的,检查“角色”,但这些页面的权限仍然由每个文件夹控制,每个文件夹都有简单的web.config文件,控制每个文件夹的安全性。因此,再一次,我们不是“逐页”设置或控制安全性,而是通过文件夹。

事实证明,网站的每个部分都有文件夹意味着你可以找到并钻到网站的一个部分进行工作。因此,如果您在超级用户或站点管理页面上工作,它们都将被分组到一个名为SiteAdmin的文件夹中,以供您的开发享受。你甚至可以在下面的网站的那个部分下降说类(s)。
所以,就像一个典型的开发人员将代码的片段和部分分解成部分和单独的例程一样?对您的网页布局和网页分组也做同样的操作。最终的结果意味着您的站点的安全分组也成为在公园散步。

相关问题