2010-02-19 9 views
5

Wir entwickeln eine browserbasierte Intranet-Anwendung. Alle Benutzer haben Active Directory-Konto, so offensichtliche Wahl würde Verwendung Integrierte Windows-Authentifizierung sein. Da jedoch mehrere Benutzer auf denselben Clientcomputer zugreifen, haben wir uns für die Verwendung der formularbasierten Authentifizierung entschieden (aber gegen AD authentifiziert).Wie authentifiziere ich Benutzer zwischen ASP.NET und WCF?

In diesem Szenario ist die beste Möglichkeit, zwischen meiner ASP.NET-Anwendung (IIS) und WCF-Dienste (ein anderer Server IIS 7) zu authentifizieren. Ich möchte den asp.Net-Kompatibilitätsmodus oder das Zertifikat nicht verwenden.

Ich denke, ein anderes Domänenkonto zu erstellen, um ASP.NET und WCF zu authentifizieren. Ich übermittle auch die Informationen über den aktuellen ASP.NET-Benutzer an WCF als Header-Informationen. Ist das der richtige Weg? Der folgende Code ruft von ASP.NET auf, um auf jede Servicemethode zuzugreifen und sie zu erhalten.

// Call WCF service from ASP.NET Application using a new domain account for each call. 
proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain"; 
ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient(); 
proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account"; 
proxy.ClientCredentials.Windows.ClientCredential.Password = "password"; 

Gibt es eine bessere Möglichkeit, WCF von ASP.NET zu authentifizieren?

Danke, Asche.

Antwort

0

Umm ... Wenn Sie AD haben und sie sich mit ihren Anmeldeinformationen anmelden, ist es egal, auf welcher Maschine sie sind, verwenden Sie einfach AD. Was ist, wenn sie dieselbe Maschine benutzen?

In jedem Fall hat Microsoft eine Menge Informationen zu diesem Thema hier:

http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home

Check it out.

+0

WCF-Service-Setup als integrierte Windows-Authentifizierung. Viele Benutzer greifen mit ihrem AD-Konto auf einen Client-PC zu. Sie möchten keine Fenster abmelden, um auf diese Anwendung zuzugreifen. Also habe ich die Formularauthentifizierung eingerichtet. Wenn sie jedoch nach dem Anmelden (Formular) auf WCF zugreifen, ist die Identität der ursprüngliche Windows-Anmeldebenutzer und nicht der Formularbenutzer. – Ash

+0

Ah, ich denke, ich verstehe, Sie wollen Kerberos nicht einrichten.Wenn Sie Kerberos einrichten, können Sie sich mit AD im Web-Service authentifizieren, ohne dass der Benutzer etwas tun muss. Oder ist das der bessere Weg, von dem du sprichst? – Hogan

+0

Ja, ich möchte Kerberos einrichten und ich möchte mit AD authentifizieren, aber da ich irgendwie authentifizierte ASP.NET-Formular Benutzer an WCF übergeben kann, so WCF denke, es als der aktuelle Benutzer. (AD Benutzer). Derzeit authentifiziert WCF zwar, aber nicht den letzten Formularbenutzer, sondern den ursprünglichen Windows-Anmeldebenutzer. Danke für den Link, aber ich konnte nicht die richtige Antwort dafür finden. – Ash

3

Es gibt nichts Besonderes beim Authentifizieren einer ASP.NET-App für den WCF-Dienst. Alle normalen Auth-Optionen sind verfügbar (Benutzername, X.509, Windows).

Die interessante hier ist, dass Sie die browserbasierten Client-Anmeldeinformationen auch übergeben möchten. Dies ist ein bekanntes Muster, das als vertrauenswürdiges Subsystem bezeichnet wird. Und ja, Sie können diese im Header übergeben, solange die Nachricht geschützt (verschlüsselt) ist.

1

Das klingt wie es ist kein WCF-Problem, aber ein Problem mit dem Browser transparent authentifizieren.

Deaktivieren Sie die Windows-integrierte Authentifizierung in IIS für die ASP.NET-App, und wechseln Sie zur Basis- oder Digest-Authentifizierung. Beide werden sich weiterhin gegen AD authentifizieren, aber der Browser wird den angemeldeten Benutzer nicht transparent authentifizieren.

Verwenden Sie dann in Ihrer ASP.NET-App nur den Identitätswechsel und übergeben Sie alle Informationen, die IIS an den von Ihnen aufgerufenen WCF-Dienst übermittelt.

1

Ich weiß nicht, ASP.NET überhaupt, aber ich habe WCF einige, und ich denke, was Sie tun müssen, ist die "Formularanmeldung", um dann den Benutzer im aktuellen Thread zu imitieren, und dann Initiiere die WCF-Verbindung zum anderen Server. Werfen Sie einen Blick auf this article on msdn für einen schnellen Überblick über einige dieser rein in WCF. Ich weiß nicht, wie Sie dies in die ASP.NET-Seite integrieren werden (wie ich sagte, ich weiß nichts über diese Technologie), aber konzeptionell denke ich, dass Sie das tun müssen.

Verwandte Themen