Asp.net

ASP.NET Forms Auth允許訪問子目錄中的特定文件,當所有其他文件都應該被拒絕時

  • October 3, 2013

我在允許特定角色訪問子目錄中的特定頁面時遇到問題。

我的 ASP.NET 應用程序有一個訪問受限的目錄 ~/Forms/Administration。有一個特定的文件 ~/Forms/Administration/Default.aspx 我想授予 1 個額外的使用者角色訪問權限,以及 Admin 角色。

在 ~/Forms/Administration 中,我有一個如下所示的 web.config 文件:

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

   <location path="Forms/Administration/Default.aspx">
       <system.web>
           <authorization>
               <allow roles="Administrator, User, AdditionalUser" />
           </authorization>
       </system.web>
   </location>

</configuration>

Admin 使用者工作得很好,但 AdditionalUser 總是失敗。我已經嘗試了很多事情 - 將位置列為

<location path="Forms/Administration/Default.aspx">

並作為

<location path="~/Forms/Administration/Default.aspx">

第一個通用規則中的 deny="*" 是否具有先例?我試著改變

<deny users="*"/>

<deny users="?"/>

但這最終使 AdditionalUser 可以訪問所有內容。建議?

編輯:我嘗試將特定位置的允許放在通用拒絕規則之前,以防順序很重要。同樣的問題。

更新:我顯然在這裡遺漏了一些東西:我刪除了拒絕 * 配置,留下了特定於位置的部分。然後,我沒有允許某些角色,而是將其設置為全部拒絕 (*)。但是,當我登錄時,它根本沒有拒絕我。我什至將規則簡化為不是特定於文件的,而是適用於整個目錄,它並沒有拒絕我任何事情。但是,原始的非位置特定規則確實有效,所以我知道這個配置文件正在被讀取。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <location path="Forms/Administration">
       <system.web>
           <authorization>
               <deny users="*" />
           </authorization>
       </system.web>
   </location>
</configuration>

兩件事情:

  1. 該位置相對於 web.config 文件,因此如果您的 web.config 已經在 /Forms/Administration 中,則應將其更正為:
<location path="Default.aspx">
   <system.web>
       <authorization>
           <allow roles="Administrator, User, AdditionalUser" />
       </authorization>
   </system.web>
</location>
  1. 為了澄清 Allow 和 Deny 的順序,授權將根據它找到的第一個匹配項來應用,因此順序非常重要。例如:
<deny users="*" />
<allow users="Administrator" />

管理員將被拒絕,因為它與拒絕的第一個條目匹配…即使您在下一行指定允許管理員使用者。所以只允許管理員,正確的語法是:

<allow users="Administrator" />
<deny users="*" />

總之

如果我正確閱讀了您想要的內容,這可能是您想要的最終產品:

<configuration>
 <system.web>
   <authorization>
       <allow roles="Administrator, User" />
       <deny users="*"/>
   </authorization>
 </system.web>

 <location path="Default.aspx">
   <system.web>
       <authorization>
           <allow roles="AdditionalUser" />
       </authorization>
   </system.web>
 </location>

</configuration>

引用自:https://stackoverflow.com/questions/3938891