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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort; das können Sie nicht. So bald, wie Sie mithilfe von Benutzername/Kennwort benötigen Sie irgendeine Art von sicheren Kanal.
Aber Sie brauchen keine Zertifikate auf den clients; nur auf dem server.
InformationsquelleAutor blowdart
Tatsächlich ist es möglich, aber Sie benötigen, um Ihre eigenen Bindung.
Yaron Naveh entwickelt eine WCF-Bindung, die es ermöglicht, Klartext Benutzernamen/Passwort über HTTP. Seine Artikel enthält den code für die Bindung.
InformationsquelleAutor jassuncao
Ich weiß nicht, die details zu Ihrer Netzwerk-Infrastruktur, aber wenn Sie in einer Windows-Domäne sind, sollten Sie Windows-Anmeldeinformationen verwenden.
Es ist möglich, eine Nachricht die Sicherheit ohne die Zertifikate, wenn Sie Windows-Anmeldeinformationen verwenden. Dies ist das Standardverhalten von wsHttpBinding (aus der box).
Mithilfe der out-of-the-box-Lösungen (ohne Umsetzung Ihrer eigenen Bindung) WCF-Förderung (erfordert) Sie verwenden einen sicheren Kanal, wenn die Anmeldeinformationen für die Authentifizierung werden die Nachrichten enthalten.
Verwenden eine benutzerdefinierte Bindung, die erlaubt, dass Sie zum angeben von Anmeldeinformationen im Klartext ist sicherlich eine Lösung, aber ich würde denken, zweimal, bevor Sie es.
InformationsquelleAutor xtrem