我在一個非常頭疼的單一生產環境中發生問題。當第二個用戶登錄時,ContextSessionSecurityToken被覆蓋
你有兩個用戶,A和B.用戶A登錄,一切工作正常。用戶B登錄後,用戶B登錄後,用戶A現在具有與用戶B相同的安全令牌。
我們的WIF設置非常標準,我們在令牌上注入了一些自定義聲明,但其他所有內容看起來都是標準的至於如何創建和存儲令牌(由WIF處理)。
覺得我可能會運行到一些奇怪的邊緣情況與WIF,我不熟悉
更新:A和B可以是單獨的機器上,或者在同一臺機器上的獨立瀏覽器。
當我們請求服務時
if (HttpContext.Current == null)
return null;
if (HttpContext.Current.Cache == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule == null)
return null;
if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null)
return null;
var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken;
if (sessionToken.ClaimsPrincipal == null)
throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities == null)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities.Count == 0)
throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities");
if (sessionToken.ClaimsPrincipal.Identities[0] == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null)
throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property");
return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions, sessionToken);
如果我添加日誌記錄在這裏我可以看到sessionToken.ClaimsPrincipal.Identity.Name
獲得令牌不同於它應該是在這一點上的名字。
你是指在PC上登錄,B使用相同的PC,相同的瀏覽器會話或什麼? – nzpcmad 2013-02-20 18:37:59
如果網站是從兩個不同的機器/瀏覽器瀏覽,則不可能。令牌被張貼到網站並堅持在cookie中。沒有辦法讓用戶共享它,除非你做了一些明顯的錯誤,比如將數據存儲在靜態變量中。 – 2013-02-20 18:39:54
@nzpcmad你可以在同一臺機器上的兩個不同的瀏覽器。你可以在兩臺獨立的機器上。 – jcolebrand 2013-02-20 18:41:11