3

我做了一些改寫URL的快速沙盒測試(例如,從斯科特Guthrie的博客取)和窗體身份驗證/授權。使用窗體身份驗證/授權與重寫的URL

我有一個非常簡單的設置。

~/View/(\d{1,6})  =>  ~/Public/View.aspx?ContentID=$1 

~/Buy/(\d{1,6})  =>  ~/Private/Purchase.aspx?ContentID=$1 

我已確認該URL重寫是通過瀏覽到每個工作下列seperately

接下來,我去了,使我的窗體身份驗證/授權在Web.config的2個目錄。設置如下

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

這工作完全當我瀏覽到2頁原來的URL(在.aspx的) 但是當我瀏覽到URL重寫版本不火的。

我已經嘗試添加<location>章節Buy seperately但是這仍然無法使授權/認證模塊在踢。

據推測,這是因爲它不處理這些URL作爲ASPX資源..我可以通過將重寫規則找

<LookFor>~/Buy/(\d{1,6})\.aspx</LookFor> 

即強制改寫的版本有一個ASPX末繞過它,但這似乎只是醜陋。 反正是有得到驗證處理程序,以火無論擴展名的URL類型(或缺乏存在的)

+0

斯科特Guthrie的概述4種不同的方法,您使用的是哪一個? http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx – MyItchyChin 2009-07-18 08:35:13

回答

2

要使用內置的身份驗證,你將不得不決定是否要在原有基礎上進行身份驗證'原始'網址或重寫的網址。看來,如果你正在使用的URL重寫是迷上了已經進行的認證之後的事件,這就是爲什麼只有「公共」和「私人」文件夾規則被遵守。如果你想驗證基於改寫的URL,那麼你就必須使用該掛接到一個較早的事件(如的BeginRequest)重寫器以及與重寫的網址更新你的web.config。

或者,你可以插入自己的認證供應商,做檢查一樣都改寫,原來的URL花哨的東西,但是這可能矯枉過正只是沙盒測試場地。

請參閱本文的詳細信息:

http://msdn.microsoft.com/en-us/library/ms972974.aspx

我希望這有助於。

0

在ASP.NET 4.0(我相信這是在3.5 SP1)中,包括一個新的路由功能。使用此路由功能的好處是,它現在直接在ASP中支持。NET,因此您可以指定執行路由時,它應尊重實際.ASPX文件的授權設置。

所以我會建議您調查,如果你可以實現這個路由功能。

0

嘗試啓用formsauthentication和授權的所有請求。默認情況下,它只啓用asp.net請求,如.aspx。 可以在IIS(7)來進行,或直接在網絡服務器/模塊部分的web.config

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition=""/> 
     <remove name="UrlAuthorization" /> 
     <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="" /> 
    </modules> 
</system.webServer>