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 отличается от имени, которое предполагается в данный момент.

Ответ 1

Используется ли ваша полагающаяся сторона и сервер STS (WIF) на одном и том же IIS с использованием того же пула приложений? Если да, попробуйте использовать другой пул приложений, как иногда используется рабочий процесс, чтобы испортить вещи. Надеюсь, это поможет вам.

Ответ 2

Я видел подобную проблему. Мы решили, что это будет изменение наличных средств на IIS и в коде. Обналичка заставляла безопасность казаться запутанной, но сервер просто сохранял последний результат созданного html, делая его похожим на то, что пользователь A был зарегистрирован, а не пользователь B. Надеюсь, это поможет некоторым.

Ответ 3

Это поможет, если вы разместите дополнительную информацию о любых настройках веб-конфигурации, а также конфигурации IIS и версии .NET Framework. Для меня это звучит как проблема пула приложений, но это связано с крайне ограниченными знаниями вашей системы. Если идентификатор пула приложений является обычным, конечно, доступ к одному и тому же пользователю, если не установлена ​​локальная система или олицетворение. Если это не проблема, проверьте свои настройки авторизации и убедитесь, что анонимные и базовые отключены или что-то еще, что может потребоваться вашему приложению.