Mam problem występujący w pojedynczym środowisku produkcyjnym, które jest bardzo drapiące.ContextSessionSecurityToken jest zastępowany, gdy drugi użytkownik loguje się w
Masz dwóch użytkowników, A i B. Użytkownik A loguje się, wszystko działa poprawnie. Użytkownik B loguje się, a po zalogowaniu użytkownika B użytkownik A ma teraz ten sam token bezpieczeństwa co użytkownik B.
Nasz system WIF jest dość standardowy, wprowadzamy pewne niestandardowe roszczenia do tokena, ale wszystko inne wygląda standardowo w miarę jak token jest tworzony i przechowywany (obsługiwany przez WIF).
czuję, że może być uruchomiony w jakimś dziwnym przypadku krawędzi z WIF, że nie jestem zaznajomiony z
Aktualizacja: Zarówno A i B mogą być na oddzielnych komputerach, lub oddzielnych przeglądarek na tej samej maszynie.
Gdzie mamy token gdy zainteresowanie usługą
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);
jeśli dodam zalogowaniu tu widzę sessionToken.ClaimsPrincipal.Identity.Name
różni się od nazwy to ma być w tym momencie.
To znaczy loguje się na komputerze, B używa tego samego komputera, tej samej sesji przeglądarki lub co? – nzpcmad
Nie jest możliwe, jeśli witryna jest przeglądana z dwóch różnych komputerów/przeglądarek. Tokeny są umieszczane na stronie i przechowywane w pliku cookie. Nie ma sposobu, aby to zostało udostępnione użytkownikom, chyba że zrobisz coś obrzydliwie błędnego, jak przechowywanie danych w statycznych zmiennych. –
@nzpcmad możesz być w dwóch różnych przeglądarkach na tym samym komputerze. Możesz być na dwóch oddzielnych maszynach. – jcolebrand