private bool UpdateUserIdentity(
UserIdentityToken identityToken,
IUserIdentity identity,
IUserIdentity effectiveIdentity)
{
if (identityToken == null) throw new ArgumentNullException("identityToken");
lock (m_lock)
{
bool changed = m_effectiveIdentity == null && effectiveIdentity != null;
if (m_effectiveIdentity != null)
{
changed = !m_effectiveIdentity.Equals(effectiveIdentity);
}
// always save the new identity since it may have additional information that does not affect equality.
m_identityToken = identityToken;
m_identity = identity;
m_effectiveIdentity = effectiveIdentity;
// update diagnostics.
lock (m_diagnostics)
{
m_securityDiagnostics.ClientUserIdOfSession = identity.DisplayName;
m_securityDiagnostics.AuthenticationMechanism = identity.TokenType.ToString();
m_securityDiagnostics.ClientUserIdHistory.Add(identity.DisplayName);
}
return changed;
}
}