Mam działający niestandardowy UserNamePasswordValidator, który wywołuje moją bazę danych Oracle.WCF Custom Validator: Jak zainicjować obiekt "User" z własnego walidatora
Ta klasa wywodzi się z metody System.IdentityModel.Selectors.UserNamePasswordValidator, a metoda Validate() zwraca wartość void.
Załaduję obiekt użytkownika z bazy danych, a po sprawdzeniu poprawności hasła chcę ukryć swój obiekt "Użytkownik", aby usługa mogła uzyskać do niego dostęp podczas wykonywania swojej działalności. W środowisku ASP.NET/Java zapisałbym go w sesji, a może w mojej ogólnej klasie kontrolera. Jak to zrobić z walidatora w WCF?
Lub, innymi słowy, jaka jest najlepsza praktyka w obszarze WCF, aby ustawić niestandardowy obiekt domeny użytkownika dla usługi.
Aktualizacja: Tak właśnie nad tym pracowałem. Przechowuję bufor obiektu User podczas walidatora, a następnie uzyskuję do niego dostęp później w kroku 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;
}
Teraz ładuję mój obiekt użytkownika (IPrincipal) w walidatorze haseł, buforując go w statycznym słowniku, chwytając go w AuthoriziationPolicy. Zobacz edycję powyżej. Czy to najlepszy sposób? Na pewno wygląda jak kundel na tak bogate ramy. – codenheim
Cóż, przykręciłem format w mojej edycji powyżej i nie mogę go naprawić. To miała być pełna metoda powyżej w obszarze kodu. – codenheim