2013-03-08 43 views
0

實施例:表單驗證 - 重定向回到原始域

應用= https://test2.mytest.com/MyApplication/Download.aspx

的應用已表單認證啓用在web.config:

<authentication mode="Forms"> 
    <forms loginUrl="https://test.mytest.com/Login/" name=".ASPXAUTH"/> 
</authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 

當訪問它正確地重定向應用到登錄頁面:
https://test.mytest.com/Login/?ReturnUrl=%2fMyApplication%2fDownload.aspx

何wever,之後,可以成功登錄進入:的
https://test.mytest.com/MyApplication/Download.aspx
代替
https://test2.mytest.com/MyApplication/Download.aspx

它用在何處登錄應用程序是子域名(test.mytest.com),而不是子域名原始請求(test2.mytest.com)。 有沒有辦法將表單認證重定向回原始的請求子域而不是登錄應用程序所在的子域?

任何幫助,將不勝感激。

回答

2

是的,這當然是可以的,但您需要對認證子域和需要認證的子域進行更改。

需要驗證的子域。
您遇到的問題是,當匿名用戶嘗試訪問安全資源時,ASP.NET表單身份驗證會將其重定向到登錄頁面,並在「ReturnURL」查詢字符串中附加原始請求的資源,但此ReturnURL參數是相對URL

因此,要以您想要的方式工作,您需要操作ReturnURL參數以某種方式指示返回到不同的站點。

執行此操作的一種方法是使用HttpHandler處理ReturnURL以掛鉤PostAuthenticateRequest,如本文中的詳細描述Forms Authentication With Absolute Return URLs

進行身份驗證的子域
要啓用重定向到調用子域,您需要設置在web.config的形式部分enableCrossAppRedirects屬性爲「true」,以允許重定向到URL在另一個網站應用。請注意這一點的影響,因爲它會讓你打開open redirection attacks

直接在ReturnURL上設置子域地址(有助於防止開放重定向攻擊)的另一種更安全的方法是修改ReturnURL以在查詢字符串中包含已知參數,然後修改全局中的Application_EndRequest。如herehere所述的驗證子範圍的asax.cs重寫Response.RedirectLocation。