2009-08-10 6 views
1

WCF hat ein reiches Sicherheitsmodell, ich hoffe, dass jeder sich darauf einigen kann. Ich bin kürzlich auf eine Situation gestoßen, in der unsere Clientanwendungen (WCF-basierte Anwendungen, die die Anmeldeinformationen des Benutzers innerhalb der Domäne nutzen) mit den Diensten kommunizieren mussten, die wir in einem Rechenzentrum außerhalb unserer Domäne und Kontrolle bereitstellen mussten. Folglich hat dies unser Single-Sign-On-Modell durchbrochen, und ich würde gerne wissen, ob jemand von Ihnen Erfolg gehabt hätte, das Sicherheitsmodell auf Services außerhalb der Domain auszudehnen.Welcher Ansatz kann verwendet werden, um WCF-Sicherheit über die aktuelle Domäne hinaus zu erweitern?

Unser Identitätsmodell basiert auf den Klassen IIdentity und IPrincipal (nicht auf WindowsIdentity/WindowsPrincipal). Daher ist die Verwendung einer alternativen Identitätsimplementierung in Ordnung. Wie meine Frage impliziert, habe ich keine Antwort und ich hoffe, dass Sie es tun. Die eine Lösung, mit der ich herumgespielt habe, erfordert, dass sich der Client in unserer Domäne auf dieselbe Weise authentifiziert, wie sie es jetzt tut. Im Rahmen der Authentifizierung erhalten sie ein X.509-Zertifikat, das von unserer Zertifizierungsstelle signiert wurde (das dem Datenzentrum vertraut wird). Zertifikate würden in einem Zertifikatsspeicher untergebracht sein (ich glaube, es gibt einen, der mit .NET gebündelt ist, aber ich weiß nicht, ob er in einer Umgebung genutzt werden kann, in der sich Benutzer gelegentlich bewegen) und erstellt/bereitgestellt wird.

Ich würde mich über Feedback und/oder Ideen freuen.

bearbeiten:

Wir Dienstleistungen, die noch wohnen in unserem Rechenzentrum zusätzlich zu dem entfernten Rechenzentrum. Ich möchte eine Lösung bereitstellen, die nur eine einzige Anmeldung erfordert (und fwiw, unsere Benutzer müssen ihren Benutzernamen und ihr Kennwort jedes Mal eingeben, wenn sie diese Anwendung starten).

Antwort

0

Wenn Sie mehr oder weniger Punkt-zu-Punkt-Anfragen zwischen wenigen Teilnehmern haben, wie in einer B2B-Umgebung, dann sind Zertifikate definitiv der richtige Weg. Alles funktioniert automatisch - wenn Sie alles richtig eingestellt haben! :-)

Grundsätzlich hat Ihr Dienst ein Zertifikat zur Authentifizierung, und der Client verfügt auch über ein Zertifikat, das an den Dienst gesendet wird und die Clients gegen den Dienst authentifiziert. Auf der Server-Seite können Sie auf ServiceSecurityContext.Current.PrimaryIdentity tippen, um auf den IIdentity des Anrufers zuzugreifen.

Weitere Informationen finden Sie diese Ressourcen:

Hoffe das hilft ein bisschen!
Marc

+0

Sicher hilft. Irgendwelche Gedanken darüber, wie ich das Zertifikat an den authentifizierten Benutzer binden könnte. Beachten Sie, dass sich der Benutzer von dort aus mit seinen Domänenanmeldeinformationen anmelden muss. Ich habe kein Problem mit einem Zertifikat für die Authentifizierung bei einem Remotedienst. Ein Teil meines Auflegens bestand darin, die Beziehung zwischen den authentifizierten Anmeldeinformationen und dem Zertifikat zu verwalten. Habe gedacht? – Ajaxx

+0

Sie haben grundsätzlich zwei Möglichkeiten: (1) Erstellen Sie Windows-Benutzer an Ihrem Ende und ordnen Sie das Zertifikat einem lokalen Windows-Benutzer zu und authentifizieren sich so oder (2) verlassen sich nur auf das Zertifikat - wenn der Benutzer dieses Zertifikat vorstellt, ist er authentifiziert. –

+0

Oder (3) - Sie könnten auch individuelle Zertifikate für jeden Benutzer erstellen (was OK funktioniert, wenn Sie nur eine begrenzte Anzahl von Benutzern haben) und ihren "SubjectName" (auf ihrem Zertifikat) auf einen bestimmten Namen setzen und dann einchecken Code gegen eine Liste von gültigen Benutzern - so etwas. –

Verwandte Themen