En una aplicación ASP.net estoy usando un control de inicio de sesión con un proveedor de membresía personalizado que escribí. Lo que quiero hacer es establecer Thread.CurrentPrincipal
en mi objeto Principal personalizado, justo después de que el usuario sea autenticado.Cómo configurar Thread.CurrentPrincipal para usar en toda la aplicación?
Estoy usando el setter: Thread.CurrentPrincipal
y establece el objeto principal para mí pero, en todos los hilos consecuentes, este CurrentPrincipal se reemplaza por el predeterminado.
Aquí está mi código para el evento Autenticación del control de ingreso:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
string username = Login1.UserName;
string password = Login1.Password;
if (Membership.ValidateUser(username, password))
{
var login = sender as Login;
var phoenixIdentity = new PhoenixIdentity("B", "Forms" , true);
var principal = new PhoenixPrincipal(phoenixIdentity);
Thread.CurrentPrincipal = principal;
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
HttpContext.Current.User = principal;
e.Authenticated = true;
}
}
Por ejemplo, imagine que me conecto con el nombre de usuario A, todo va bien ... Validación pasa, pero codificar el usuario con el nombre de usuario B en el objeto Identity que está establecido en el objeto Principal que configuré como el objeto CurrentPrincipal
.
Cuando compruebo qué usuario está configurado con la identidad CurrentPrincipal
al final de este método, dice que es el usuario B. Pero cuando cargo otra página y luego verifico cuál es la identidad del CurrentPrincipal
, dice que es el usuario A.
Entonces, ¿cómo puedo hacer que mi objeto CurrentPrincipal
sea persistente en todos los otros hilos, y dónde/cuándo este control de inicio de sesión establece el objeto CurrentPrincipal
del Subproceso?
¿Qué estás haciendo? ¿Desea que todos sean identificados como el primer usuario conectado? Debe comprender los mecanismos de autenticación y autorización de aplicaciones web, el uso de cookies, etc. No puede establecer un principal para todos los subprocesos de aplicaciones multiusuario. –
Por supuesto que no. Tal vez no me expresé con la suficiente claridad. – Goran