WCF 4.0 REST Benutzername Passwortauthentifizierung

8

Ich habe in einem WCF 4.0 RESTfull-Dienst mit den ASP.Net-Mitgliedschafts- / Rollenanbietern mit der Authentifizierung / Autorisierung von Benutzername / Passwort gekämpft.

Nachdem ich zwei Tage damit verbracht habe, etwas zu finden, mit dem die meisten Menschen einverstanden sind, habe ich aufgegeben. Eine Menge Verwirrung scheint zu sein, da es nur wenige Informationen speziell für WCF 4.0 gibt.

Könnte jemand freundlich genug sein

  1. Geben Sie eine verbindliche Ansicht darüber, ob WCF 4.0 + REST zu Beginn eine gute Idee ist?
  2. Skizzieren Sie die allgemein akzeptierten Schritte, um dies (oder die Links) zu tun.
  3. Geben Sie eine einigermaßen vollständige Beispielcodierung an, die benötigt wird, um dies zu vervollständigen.

Bearbeiten: Bounty für alle, die ein vollständiges Beispiel (oder auch nur einen Link zu einem vollständigen Beispiel) mit Benutzername / Passwort Authentifizierung und Autorisierung für einen RESTfull WCF 4.0-Dienst unter Verwendung der WCF-Dienstanwendungsvorlage in VS 2010 bereitstellen können.

    
NVM 18.09.2011, 23:15
quelle

4 Antworten

10

Ich denke, dass die Antwort auf Ihre Frage vom Zweck Ihres Dienstes und von der Art der Anwendungen abhängt, die Sie verwenden werden.

Wenn Sie eine vorhandene ASP.Net-Anwendung haben und einen Teil ihrer Funktionalität als RESTfull-Dienst verfügbar machen möchten, den Sie mit AJAX auf der Clientseite nutzen könnten, ist WCF möglicherweise nicht die beste Option. In diesem speziellen Fall haben Sie bereits einen Authentifizierungsbenutzer in der Webanwendung und möchten, dass diese Authentifizierung während der AJAX-Aufrufe weitergegeben wird. Dies umzusetzen ist eigentlich ziemlich einfach.

ASP .Net Forms-Authentifizierung basiert auf Authentifizierungscookies, die nach erfolgreicher Anmeldung generiert und an den Browser übergeben werden. Jeder Anruf, der vom Browser an eine URL in derselben Domäne wie Ihre Anwendung gesendet wird, enthält auch den Authentifizierungscookie. In ASP.NET MVC können Sie einfach Ihre Service-Methoden als Controller-Aktionen implementieren, die eine Autorisierung erfordern und alles wird für Sie hinter den Kulissen passieren.

Im klassischen ASP .Net können Sie PageMethods verwenden, um Ihre Servicemethoden zu implementieren und erneut wird der Cookie hinter Szenen für Sie gesendet und validiert (Beispiele für PageMethods hier und hier ).

Wenn Ihr Dienst andererseits außerhalb des Browsers verwendet wird (z. B. von Desktop- oder mobilen Anwendungen), ist WCF möglicherweise das richtige Werkzeug für die Implementierung des Dienstes. Die ASP.Net-Formularauthentifizierung ist jedoch nicht die beste Wahl für die Implementierung von Sicherheit. Der Hauptzweck von REST-Diensten ist die Einfachheit, so dass Clients leicht auf jeder Plattform implementiert werden können und der Cookie-basierte Mechanismus von ASP .Net-Formularauthentifizierung ist nicht gerade einfach.

Ein Protokoll, das speziell für die Benutzerauthentifizierung im Kontext von Webdiensten erstellt wurde, ist OAuth. Es ist zweite Version ist noch im Entwurf (finden Sie die Spezifikationen hier ), aber wahrscheinlich ist dies die Version, die Sie verwenden möchten, da es ist viel einfacher als OAuth 1.0. Facebook hat seine API-Authentifizierung bereits über OAuth 2.0 implementiert (Details hier ). Vielleicht möchten Sie deren Implementierung zur Inspiration überprüfen.

Neben der Benutzerauthentifizierung stellt OAuth auch sicher, dass die Anwendungs- (Dienstclient-) Authentifizierung verwendet wird, und stellt außerdem sicher, dass der Benutzer seine Anmeldeinformationen niemals direkt in der Clientanwendung eingibt. Wenn das ein bisschen zu viel ist, was Sie tatsächlich brauchen, können Sie eine benutzerdefinierte Implementierung erstellen, die von OAuth 2.0 inspiriert ist.

Zunächst müssen Sie Ihren Dienst über HTTPS verfügbar machen, damit die gesamte Kommunikation zwischen dem Dienst und dem Client verschlüsselt wird. Zweitens müssen Sie eine Anmeldemethode im Service wie folgt erstellen:

%Vor%

Bei einer erfolgreichen Anmeldung gibt die obige Methode ein Authentifizierungstoken zurück. Das Authentifizierungstoken wird dann für alle anderen Methoden verwendet und validiert. Zum Beispiel:

%Vor%

In der obigen Architektur hat das authToken die gleiche Rolle wie das Authentifizierungs-Cookie in der ASP.NET-Formularauthentifizierung, wird jedoch als einfacher Parameter übergeben. Sie sind dafür verantwortlich, den Algorithmus zur Generierung der Token zu implementieren (sie müssen lang genug und einzigartig sein, mit einem Algorithmus wie hier ) und diese auch speichern und validieren.

    
Florin Dumitrescu 04.10.2011 22:41
quelle
2

WCF Web Api macht das Schreiben WCF Rest Service sehr einfach, aber es kommt mit Einschränkungen. Für die Authentifizierung müssen Sie WCF Rest Contrib

verwenden

Wenn Sie maximale Kontrolle über Ihr Service-Design haben möchten, sollten Sie auf ASP.NET MVC zurückgreifen und Controller-Methoden für jede Service-Methode schreiben.

    
Muhammad Hasan Khan 19.09.2011 06:09
quelle
1

Ein Ansatz besteht darin, einen sicheren Schlüssel zu verwenden. und Token

  1. Jeder Kunde hat einen sicheren Schlüssel , den er auf erste Anfrage sendet, wahrscheinlich im Header.
  2. Sie können Schlüssel wie Schlüssel = MD5Hash (Benutzername + Passwort);
  3. generieren
  4. Als Antwort bekommt er token , der Token wird dann in jedem gesendet anfordern. Token kann Guid sein. Jedes Token ist nach x Minuten abgelaufen.
  5. Auf der Server-Seite können Sie ein Singleton-Dictionary wie Dictionay verwalten, um den Token-Ablauf zu überprüfen, wenn die aktuelle Zeit & gt; Ablaufzeit entfernen Sie es aus dem Wörterbuch.
  6. Um Sitzungen zu erneuern, fügen Sie die Methode "renew session" in Ihren Code ein.

Für die Sicherheit von extream

Haben Sie ein privates / öffentliches Schlüsselpaar, der Client verschlüsselt die gesamten Postdaten mit dem öffentlichen Schlüssel und Sie entschlüsseln mit dem privaten Schlüssel.

    
Ajay Kelkar 02.02.2013 06:43
quelle
-1

Hier ist ein Beispiel mit asp.net mvc gemacht

Wenn ich Ссылка anrufe, erhalte ich eine Fehlermeldung. Wenn ich jedoch zuerst Ссылка aufruft, gibt die ursprüngliche URL ein gültiges Ergebnis zurück.

%Vor%

Wenn Sie .svc bereits geschrieben haben und sie nicht über MVC ausgeführt werden, können Sie sie in einen beliebigen über web.config gesicherten Ordner stellen und dann die Login-Methode oben verwenden, um sich anzumelden, bevor Sie sichere Anrufe tätigen.

    
Vitalik 01.10.2011 00:17
quelle