Ho riscontrato un problema in un singolo ambiente di produzione che è molto graffiante.ContextSessionSecurityToken viene sovrascritto quando il secondo utente effettua l'accesso
Hai due utenti, A e B. Utente A accede, tutto funziona correttamente. L'utente B si collega e dopo che l'utente B si collega, l'utente A ora ha lo stesso token di sicurezza dell'utente B.
La nostra configurazione WIF è abbastanza standard, noi inseriamo alcune richieste personalizzate sul token, ma tutto il resto sembra standard come per quanto riguarda la modalità di creazione e memorizzazione del token (gestito da WIF).
sento come se potrebbe essere in esecuzione in qualche caso limite strano con WIF che non ho familiarità con
Aggiornamento: Sia A e B può essere su macchine separate, o browser separati sulla stessa macchina.
Dove si ottiene il token quando si richiede un servizio
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);
se aggiungo la registrazione qui posso vedere il sessionToken.ClaimsPrincipal.Identity.Name
diverso dal nome che dovrebbe essere a questo punto.
Significa che si accede a un PC, B utilizza lo stesso PC, stessa sessione del browser o cosa? – nzpcmad
Non possibile se il sito viene sfogliato da due macchine/browser diversi. I token sono pubblicati sul sito e persistono in un cookie. Non c'è modo per questo di essere condiviso tra gli utenti a meno che non si faccia qualcosa di sbagliato come immagazzinare dati in variabili statiche. –
@nzpcmad puoi essere su due diversi browser sulla stessa macchina. Puoi essere su due macchine separate. – jcolebrand