WCF Benutzernamen ohne Zertifikat

Arbeite ich an einem Projekt, wo ich noch die folgenden.

  • WCF-Dienst auf der server-Seite.NET 3.5)
  • WPF-client für die client-Seite (.NET 3.0)

Ich habe eine bestehende Anwendung, die ich verwenden müssen Sie die Authentifizierung und Autorisierung aus (auf der Serverseite). Ich muss auch zum speichern von Metadaten über den Benutzer, die in der WCF-Dienst-Thread AUFTRAGGEBER (ein Objekt). Ich mache das so, dass ich es bekommen können in der WCF-Dienst, wenn ich unbedingt zu; einige business-Logik erfordern. Also mein plan war folgender...

Erstellen Sie eine benutzerdefinierte ServiceAuthorizationManager für den server und dort werde ich die log-in der user und Holen Sie sich die Rollen aus der bestehenden Anwendung. Ich cache die "Site" - Objekt, und nach weiteren reqests ziehen Sie aus dem cache. Außerdem benötige ich CustomPrincipal Objekt, halten meine benutzerdefinierten Daten. Ich möchte die Identität des Benutzers annehmen, so dass ich verwenden können, die eingebauten Rollen filtern im WCF wie diese:

[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}

Ich versucht, verwenden Sie die ASP.NET Autorisierung mit einer benutzerdefinierten Rollen provider, aber ich war nicht in der Lage, alles auf dem Aktuellen Prinzipalserver. Auch habe ich versucht eine benutzerdefinierte IAuthorizationPolicy, aber Probleme entstanden. Diese Probleme behandelt werden können mit den WCFClient.exe Anwendung, wenn es war die Entdeckung (mit Hilfe der mex-endpoing) würde es nicht geben, keine Anmeldeinformationen, so dass die login fehlschlagen würde. Ich schließlich beschlossen, dass eine ServiceAuthorizationManager war der richtige Weg, aber ich bin offen für andere Vorschläge.

Auf dem client erfasse ich die Zugangsdaten ein und setzen Sie Sie in den WCF-proxy-Klasse, wie folgt.

proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;

Als ich begann diesen Weg gehen, bemerkte ich, dass ich nicht in der Lage, um die Benutzername/Passwort in der CheckAccessCore Methode meiner manager-Klasse. Weitere Untersuchungen zeigten, dass ich wirklich so sein sollte authentifizieren, die in einer benutzerdefinierten UserNamePasswordValidator. So habe ich eine erstellt. Das problem ist, dass die validate-Methode nie aufgerufen.

Weitere Untersuchungen zeigten, dass, um für die validate Methode aufgerufen werden, mein WCF-Dienst wurde entweder Nachricht oder transport level security. Das problem ist, dass ich kann nicht herausfinden, wie man eine Nachricht oder transport level security ohne X. 509 Zertifikat. Dieses Produkt wird in mehreren hundert unglaublich gesperrt Maschinen und der Installation eines Zertifikats ist nicht möglich.

Gibt es eine Möglichkeit, das zu tun, was ich verlange ohne ein Zertifikat zu installieren?

InformationsquelleAutor Joshua | 2008-12-18

Schreibe einen Kommentar