Tengo un UserNamePasswordValidator personalizado que funciona y que llama a mi Oracle DB.Validador de WCF personalizado: cómo inicializar un objeto "Usuario" del validador personalizado
Esta clase se deriva de System.IdentityModel.Selectors.UserNamePasswordValidator y el método Validate() devuelve void.
Cardo mi objeto Usuario de la base de datos, y una vez que se valida la contraseña, quiero guardar mi objeto "Usuario" para que el servicio pueda acceder a él cuando se ocupa de sus asuntos. En ASP.NET/Java land lo guardaría en una sesión, o tal vez en mi clase general de Controller. ¿Cómo hago esto desde el Validator en WCF?
O, en otras palabras, ¿cuál es la mejor práctica en terrenos de WCF para establecer un objeto de dominio de usuario personalizado para el servicio.
Actualización: Así es como he trabajado para solucionarlo. Guardo en la memoria caché el objeto User durante el validador, luego lo accedo más adelante en el paso AuthorizatinPolicy.
// this gets called after the custom authentication step where we loaded the User
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
// get the authenticated client identity
IIdentity client = GetClientIdentity(evaluationContext);
User user;
OraclePasswordValidator.users.TryGetValue(client.Name, out user);
if(user != null) {
// set the custom principal
evaluationContext.Properties["Principal"] = user;
return true;
}
return false;
}
Ahora estoy cargando mi objeto Usuario (IPrincipal) en el validador de contraseñas, guardándolo en caché en un Diccionario estático, tomándolo en la AuthoriziationPolicy. Ver editar arriba. Es esta la mejor manera? Claro parece un desafío para un marco tan rico. – codenheim
Bueno, arruiné el formato en mi edición anterior y no puedo arreglarlo. Se suponía que era un método completo arriba en el área de código. – codenheim