我有兩個網站:如何讓ClaimsPrincipal的FedAuth Cookie在共享公共域的兩個網站之間共享?
global.domain.com和global.domain.com/site1
/網站一個是應用程序被添加global.domain.com的網站下IIS。
用戶將登錄到global.domain.com,然後單擊到global.domain.com/site1的鏈接即可到達該位置。由於我使用的MachineKeys的匹配,而信息在這篇文章中:
http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx
我設置一個窗體身份驗證cookie的,而這允許單個用戶進行「認證」在同樣的域名網站之間。
我還在每個站點使用ClaimsPrincipal來處理通過.NET 4.5中的新聲明來分配角色。
但是,當用戶點擊或輸入站點/ site1時,站點1正在獲取全球站點的聲明,我不希望發生這種情況。
如果非要從全球網站的直接鏈接到/ site1的,我可以用一個控制器動作調用後,將用戶重定向:
FederatedAuthentication.SessionAuthenticationModule.SignOut();
和清除FedAuth餅乾。
但是,如果用戶只是將/ site1添加到全球站點URL的後面並且命中,那麼來自Global的聲明會攜帶到claim/site1的聲明。
每個站點應該有自己的權利......
我試圖消除在我PostAuthenticate處理程序FedAuth餅乾在Global.asax中:
protected void Application_PostAuthenticateRequest()
{
if (HttpContext.Current.Request.UrlReferrer == null)
{
FederatedAuthentication.SessionAuthenticationModule.SignOut();
HttpContext.Current.Request.Cookies.Remove("FedAuth");
return;
}
}
,但似乎並沒有做訣竅,如果我在Application_PostAuthenticateRequest的第一行放置一箇中斷並查看ClaimsPrincipal.Current.Identities.First()。Claims集合,所有的聲明都來自全局。
所以即使我調用SessionAuthenticationModule.SignOut();並刪除FedAuth Cookie,我仍然需要找到一種方法來從ClaimsPrincipal.Current中刪除索賠,這看起來有點「駭人聽聞」。
有沒有人知道在何處和何時ClaimsPrincipal.Current被賦值?由於它在Global.asax訪問我的處理程序之前訪問/ site1時有全球站點的聲明,因此在管道中必須有其他位置正在填充ClaimsPrincipal.Current的聲明...
有什麼想法?
想知道你是否解決了這個問題。我遇到了同樣的問題。 – CedricB 2013-08-05 20:13:34