2013-02-20 11 views
10

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.

+0

Significa che si accede a un PC, B utilizza lo stesso PC, stessa sessione del browser o cosa? – nzpcmad

+2

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. –

+0

@nzpcmad puoi essere su due diversi browser sulla stessa macchina. Puoi essere su due macchine separate. – jcolebrand

risposta

0

Ho visto un problema simile. Abbiamo deciso di cambiare l'incasso su IIS e nel codice. L'incassare causava l'apparente sicurezza della sicurezza, ma il server stava semplicemente memorizzando l'ultimo risultato del codice HTML generato, facendo sembrare che l'utente A fosse loggato e non l'utente B. Spero che questo aiuti alcuni.

1

Il server relying party e STS (WIF) è ospitato sullo stesso IIS utilizzando lo stesso pool di applicazioni? In caso affermativo, provare a utilizzare un pool di applicazioni diverso poiché a volte il processo di lavoro viene utilizzato per rovinare le cose. Spero che questo ti possa aiutare.

0

Sarebbe utile se avessi pubblicato alcune informazioni aggiuntive riguardanti sia le impostazioni di configurazione web sia la configurazione di IIS e la versione di .NET Framework. Per me, questo suona come un problema di pool di applicazioni, ma è con una conoscenza estremamente limitata del tuo sistema. Se l'identità del pool di applicazioni è personalizzata, ovviamente si accede allo stesso utente, a meno che non sia impostato il sistema locale o la rappresentazione. Se questo non è il problema, controlla le tue impostazioni di autorizzazione e assicurati che siano anonimi, e di base siano disattivati, o qualsiasi altra cosa possa essere richiesta dalla tua applicazione.

Problemi correlati