如果cookie已被寫入zzz.example.com
然後www.example.com
網站無法閱讀 - 跨子域共享餅乾的方法是把它們寫.example.com
。
這可以在窗體身份驗證使用的forms element的domain
屬性在web.config配置:
<forms [...]
domain=".example.com">
注意在域名超前時段。
編輯迴應置評
你或許應該被鉤住PostAuthenticateRequest event - 這是後用戶的身份解僱(或缺乏)成立,你可以註冊一個custom HttpModule收到此事件。
編輯展現運作
好吧,我剛剛測試了以下設置:
Web應用程序項目,具有以下目錄結構:
/Default.aspx -- Simple aspx page.
/Login.aspx -- Simple aspx page, with a Login control.
/web.config -- Main application config.
/Classes/CheckingAuthenticate.cs -- HttpModule, configured in root.
/Restricted/Default.aspx -- Simple asp page.
/Restricted/web.config -- Config file for authorization
因此,根web.config使用標準的ASP.NET成員資格提供程序設置Forms身份驗證,並將/Login.aspx
設置爲登錄頁面。我也註冊有一個自定義的HttpModule:
<httpModules>
<add name="CheckingAuthenticate"
type="TempWebApp.Classes.CheckingAuthenticate"/>
[...]
</httpModules>
在/Restricted/
的web.config中拒絕匿名用戶訪問(這同樣可以在<location>
元素來完成根):
<configuration>
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
然後,我的http模塊中有以下代碼:
using System;
using System.Web;
using System.Web.Security;
namespace TempWebApp.Classes {
public class CheckingAuthenticate : IHttpModule {
public void Dispose() {
//clean-up code here.
}
public void Init(HttpApplication context) {
context.PostAuthenticateRequest += OnPostAuthenticate;
}
public void OnPostAuthenticate(object sender, EventArgs e) {
var app = sender as HttpApplication;
if (!UrlAuthorizationModule.CheckUrlAccessForPrincipal(app.Request.Path,
app.User,
"GET")){
//Code here to read cookies, redirect user etc.
}
}
}
}
這將在用戶通過身份驗證後觸發,但在ASP.NET嘗試之前觸發授權用戶,所以您有機會自己檢查訪問權限並重定向。我已經很高興地打破了這一點。如果用戶無法訪問這些頁面,我沒有看到AuthorizeRequest或PostAuthorizeRequest事件。
是的,這是真實的,cookie寫入.example.com,以便所有子域都可以訪問它。問題仍然存在,如果cookie尚不存在,我怎麼能Response.Redirect他們到另一個域之前的表單身份驗證重定向發生? – kazzamalla
我肯定可以在我的Global.asax.cs文件中爲這個事件編寫代碼,但是在用戶通過身份驗證後不會觸發?我想在用戶通過表單身份驗證重定向到登錄頁面之前執行我的重定向,並要求登錄。但是,正如在我對漢克的評論中,我需要一種方法來測試用戶試圖訪問的頁面是否受到表單身份驗證的保護。有任何想法嗎? – kazzamalla