[英]Using Forms Authentication/Authorization with Rewritten URLs
我正在使用一些重寫URL進行快速沙盒測試(例子來自Scott Guthrie的博客)和表單身份驗證/授權。
我的設置非常簡單。
~/View/(\d{1,6}) => ~/Public/View.aspx?ContentID=$1
和
~/Buy/(\d{1,6}) => ~/Private/Purchase.aspx?ContentID=$1
我已經確認URL重寫正在通過單獨瀏覽以下各項來工作
接下來,我開始為Web.Config中的這兩個目錄啟用表單身份驗證/授權。 設置如下
<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重寫版本時,它根本不會觸發。
我試圖單獨為Buy
添加<location>
部分,但這仍然無法導致授權/身份驗證模塊啟動。
可能這是因為它沒有將這些URL視為ASPX資源...我可以通過使重寫器規則查找來解決它
<LookFor>~/Buy/(\d{1,6})\.aspx</LookFor>
即強制重寫的版本最后有一個ASPX,但這看起來很難看。 無論如何都要讓Auth處理程序為任何URL類型觸發,無論擴展名(或缺少擴展名)
要使用內置身份驗證,您必須根據原始“原始”URL或重寫的URL來決定是否要進行身份驗證。 看起來好像您正在使用的URL重寫器已在執行身份驗證后連接到事件,這就是為什么只遵循“公共”和“私有”文件夾規則的原因。 如果要根據重寫的URL進行身份驗證,則必須使用連接到早期事件(例如BeginRequest)的重寫器以及使用重寫的URL更新web.config。
或者,您可以插入自己的身份驗證提供程序,並執行諸如檢查重寫和原始URL之類的奇特事情,但這對於沙盒測試站點來說可能有點過分。
有關更多信息,請參閱此文章:
http://msdn.microsoft.com/en-us/library/ms972974.aspx
我希望這有幫助。
在ASP.NET 4.0中(我相信它在3.5 SP1中),包含了一個新的路由功能。 使用此路由功能的好處是現在可以直接在ASP.NET中支持它,因此您可以指定在執行路由時,它應該遵守實際.ASPX文件的授權設置。
因此,我建議您調查是否可以實現此路由功能。
它不清楚你使用的url重寫庫,但從我認為它可能urlrewriter.net的東西的外觀,但我沒有看到任何標記?
嘗試對所有請求啟用formauthentication和authorization。 默認情況下,它僅對.aspx等asp.net請求啟用。 可以在IIS(7)中完成,也可以直接在webserver / modules部分的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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.