initialisieren Ich habe eine funktionierende benutzerdefinierte UserNamePasswordValidator, die in meine Oracle DB aufruft.WCF Custom Validator: Wie ein "Benutzer" -Objekt aus benutzerdefinierten Validator
Diese Klasse wird von System.IdentityModel.Selectors.UserNamePasswordValidator abgeleitet und die Validate() -Methode gibt void zurück.
Ich lade mein Benutzerobjekt aus der Datenbank, und sobald das Passwort validiert ist, möchte ich mein "Benutzer" -Objekt speichern, damit der Dienst darauf zugreifen kann, wenn es seinen Geschäften nachgeht. In ASP.NET/Java lande ich es in eine Sitzung oder vielleicht meine gesamte Controller-Klasse. Wie mache ich das vom Validator in WCF?
Oder mit anderen Worten, was ist die beste Vorgehensweise in WCF Land, um ein benutzerdefiniertes Benutzerdomänenobjekt für den Dienst festzulegen.
Update: So habe ich gearbeitet. Ich speichere das Benutzerobjekt während des Validators zwischen und speichere es später im AuthorizatinPolicy-Schritt.
// 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;
}
Ich lade jetzt mein User-Objekt (IPrincipal) in den Passwort-Validator, speichere es in einem statischen Dictionary und nehme es in die AuthorizationPolicy. Siehe oben Bearbeiten. Ist das der beste Weg? Sicher scheint wie ein Klotz für solch einen reichen Rahmen. – codenheim
Nun, ich habe das Format in meiner Bearbeitung oben vermasselt und kann es nicht beheben. Das sollte eine vollständige Methode oben im Code-Bereich sein. – codenheim