2010-01-19 9 views
6

Ich habe einen Dienst, der einen benutzerdefinierten "UserNamePasswordValidator" verwendet und das validierte Benutzerobjekt speichern muss, um es später im Dienst abrufen zu können. Wie kann ich das machen? Oder wie kann ich später im Service auf die Anmeldeinformationen des Benutzers zugreifen?So speichern Sie Benutzerobjekt in WCF

/Viktor

Antwort

3

Die kurze Antwort ist, dass die meisten richtige Option ist eine IPrincipal Instanz zu erstellen, die den authentifizierten Benutzer darstellt und auf Thread.CurrentPrincipal setzen.

Der gesamte Code, der später im Dienst auf demselben Thread ausgeführt wird, kann über Thread.CurrentPrincipal auf den authentifizierten Benutzer zugreifen.

Dies ist die Standardmethode für den Umgang mit authentifizierten Benutzern in .NET (und damit auch in WCF).

6

Es ist nicht so einfach. Das Problem ist, dass der benutzerdefinierte UserNamePasswordValidator vor der AuthorizationPolicy.Evaluate() und irgendwo dazwischen aufgerufen wird, WCF initialisiert Thread.CurrentPrincipal selbst. Ich habe versucht, es in den Passwort-Validator setzen, aber es funktioniert nicht, es wird sofort nach WCF gekracht, wenn der ursprüngliche Prinzipal erstellt wird. Die einzige Möglichkeit, es zum Laufen zu bringen, ist, wenn ich warte und Thread.CurrentPrincipal in der AuthorizationPolicy.Evaluate() -Methode setze.

Ich würde gerne einen WCF-Guru das erklären, weil ich so viele WCF-Anfänger sehe, die das gleiche Problem haben, und ich sehe es als einen Fehler im WCF-Design.