Ho un UserNamePasswordValidator personalizzato che chiama nel mio DB Oracle.Convalida personalizzato WCF: come inizializzare un oggetto "Utente" dal validatore personalizzato
Questa classe deriva da System.IdentityModel.Selectors.UserNamePasswordValidator e il metodo Validate() restituisce void.
Carico il mio oggetto Utente dal database e, una volta convalidata la password, voglio nascondere il mio oggetto "Utente" in modo che il servizio possa accedervi quando procede per la sua attività. In ASP.NET/Java land lo metterei in una sessione, o forse la mia classe di controller generale. Come faccio questo dal Validator in WCF?
O, in altre parole, qual è la migliore pratica in terra WCF per impostare un oggetto dominio utente personalizzato per il servizio.
Aggiornamento: Ecco come ho lavorato intorno ad esso. Metto in cache l'oggetto User durante il validatore, quindi lo accedo più tardi nel passaggio 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;
}
Ora sto caricando il mio oggetto Utente (IPrincipal) nel validatore della password, memorizzandolo nella cache in un dizionario statico, acquisendolo in AuthoriziationPolicy. Vedi modifica sopra. È questo il modo migliore? Sicuramente sembra un disastro per una struttura così ricca. – codenheim
Bene, ho rovinato il formato nella mia modifica sopra e non posso ripararlo. Quello doveva essere un metodo completo sopra nell'area del codice. – codenheim