2009-08-30 153 views
19

大部分情況下,我的web應用程序需要身份驗證才能執行任何操作。有幾頁,即主頁,我希望人們能夠訪問而無需進行身份驗證。如何使用FormsAuthentication授予對URL的匿名訪問權限?

具體,我想以允許對這些網址的匿名訪問:

/home 
/default.aspx 

我使用asp.net MVC和FormsAuthentication。這兩個網址指向相同的看法:

/home/index.aspx 

這是我在web.config中的當前配置。

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 
<authorization>   
    <deny users="?" />  
</authorization> 

閱讀授權標籤的文檔,它說:「配置Web應用程序的授權,控制客戶端訪問URL資源。」看起來我應該能夠使用授權標籤來指定一個url並允許訪問。

喜歡的東西:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 

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

<authorization url="/default.aspx">   
    <allow users="?" />  
</authorization> 

<authorization url="/home">   
    <allow users="?" />  
</authorization> 

回答

39

我不想回答我的問題,但因爲我做了最後想出來的,我想我會分享知識。

使用位置標記並將正確順序的允許和拒絕標記。

location標記可用於配置特定的url資源。在我的情況下,我想專門配置一些網址和文件夾。

這一開始並不奏效,因爲我沒有按正確順序的允許/拒絕。根據MSDN的說法,「授權模塊授予或拒絕訪問URL資源,具體取決於發現的第一條訪問規則是允許還是拒絕規則。」

在我的情況下,我需要先將所有公共的東西(default.aspx,home,styles,images,scripts)放在一起,然後我對其他東西進行否定。我遺漏了最後一個位置標記的路徑。這使它適用於所有文件和子文件夾。

最終的結果,用戶可以進入網頁,拉起圖片和樣式,但一切必須登錄

這裏是我現在的網絡配置文件:

<!--AUTHORIZATION AND AUTHENTICATION RULES--> 
    <location path="default.aspx"> 
    <system.web> 

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

    </location> 

    <location path="Home"> 
    <system.web> 

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

    </location> 

    <location path="Styles"> 
    <system.web> 

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

    </location> 

    <location path="Scripts"> 
    <system.web> 

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

    </location> 

    <location path="images"> 
    <system.web> 

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

    </location> 

    <location allowOverride="true"> 
    <system.web> 
     <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" /> 
     </authentication> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <!--END AUTHORIZATION AND AUTHENTICATION RULES--> 
+13

爲什麼謙遜CW?如果您最終回答自己的問題併發布解決方案,那麼您不僅可以幫助自己,還可以幫助其他人。自豪並參加支票。感謝參與。 – 2010-04-29 14:02:17

+0

昨天在搜索了多個合理的答案之後,我確實爲此掙扎了大約3個小時。這是似乎使所有的差異和許多感謝突出這一點的順序。感謝發佈。 – nealkernohan 2010-12-07 08:31:33

+0

在MVC 4中,您只需要允許用戶使用所需的控制器。沒有必要添加對樣式/腳本等的特殊訪問。已完成的文件夾。同時將您擁有的覆蓋內容移到主system.web節點中。 – 2013-10-10 23:29:38