RESTful Benutzerauthentifizierungsdienst

8

Hey Leute, das scheint ziemlich oft diskutiert worden zu sein, aber ich möchte eine einfache, verwässerte Frage bei der Authentifizierung mit RESTful-Diensten stellen. Das Szenario ist wie folgt:

  • Es gibt ein System, das registrierte Benutzer für eine Anwendung enthält. Das System legt eine RESTful-API für den Zugriff auf diese Benutzer offen.
  • Es gibt eine Front-End-Anwendung mit einem Anmeldeformular. Die Anwendung kann entweder intern oder extern sein.
  • Die Front-End-Anwendung muss die Daten im Benutzersystem verwenden, um einen Benutzer zu authentifizieren.

Die Frage ist nun, wie man einen Benutzer authentifiziert, dessen Zugangsdaten (Benutzername / Passwort) in der Client-Anwendung mit den Daten im Benutzersystem so eingegeben werden, dass er sicher und performant ist? Nehmen wir an, diese Client-Anwendung ist in einer Art Intranet intern, aber die Anwendungen befinden sich nicht auf demselben Computer und kommunizieren möglicherweise nur über den Dienst.

Ich verstehe die Idee, dass die Anwendung "hypermedia-getrieben" sein soll, aber wir sollten Filter- / Suchdienste anbieten können. Betrachten Sie zum Beispiel die Ressourcen und die API wie folgt:

  • Ссылка
    • GET - ruft alle Benutzer ab (seitenweise, hypermediale)
    • POST - erstellt neuen Benutzer
    • PUT / DELETE wird nicht unterstützt
  • Ссылка
    • GET - gibt eine vollständige Repräsentation eines Benutzers mit id = {id}
    • zurück
    • PUT - Aktualisiert den Benutzer, nimmt jeden vordefinierten Medientyp an
    • DELETE - Löscht den Benutzer (mit entsprechender Berechtigung)
    • POST wird nicht unterstützt

Basierend auf dem oben Gesagten wäre es meine Idee, die Client-Anwendung GET auf den Benutzer-Eintrag GETTING zu bekommen, gefiltert nach dem Benutzernamen. Der Dienst gibt das Hash-Kennwort und den Hashwert an den Client zurück, der Client führt die Authentifizierung durch.

Gedanken?

    
djunforgetable 07.01.2010, 05:31
quelle

5 Antworten

6

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie einen generischen Dienst implementieren, der die Authentifizierung übernimmt, damit Sie ihn für verschiedene Anwendungen wiederverwenden können.

Ich schlage vor, dass Sie sich OAuth ansehen, das für genau diese Problemdomäne erstellt wurde.

    
Stefan Tilkov 08.01.2010 15:36
quelle
4

Das Übergeben des Benutzernamens und des Saltbacks ist unnötig und ein echtes Sicherheitsrisiko.

Vielleicht könnten Sie diesen Ansatz in Betracht ziehen:

Lassen Sie den Client den Benutzernamen und das Passwort über Standardauthentifizierung

an den Server weiterleiten

Der Server holt das verschlüsselte Passwort für den Benutzernamen zusammen mit dem Salz

Der Server verschlüsselt das angegebene Passwort unter Verwendung einer Verschlüsselungsmethode, wobei das Salz zur Unterstützung des Algorithmus verwendet wird (Ruby-Code folgt):

%Vor%

Es gibt mehrere Orte, an denen man diese Art von Ansatz verwenden kann, aber ich mag es in Rack.

Letzter Punkt, alles auf einer HTTPS-Verbindung machen

    
Chris McCauley 14.01.2010 21:17
quelle
4

Stormpath

Stormpath Unternehmen gewidmet, um eine Benutzer-Login-Management-API und Service für Entwickler bereitzustellen. Sie verwenden einen REST JSON Ansatz.

Es gibt einige andere Firmen, die sich in diesem neuen Bereich der Authentifizierung als Dienst versuchen, aber Stormpath ist der einzige, den ich kenne, der diesem gewidmet ist.

    
Basil Bourque 01.02.2014 23:24
quelle
3

Zuerst möchten Sie nicht, dass der Client die Authentifizierung durchführt, da es dann einfach wäre, einen Client zu schreiben, der in Ihren Dienst einbricht.

Verwenden Sie stattdessen einfach einen Authentifizierungsmechanismus wie HTTP Basic oder HTTP Digest .

Beachten Sie, dass bei Verwendung von Java das Restlet -Framework Abfangmechanismen, sogenannte Guards, bereitstellt, die diese und andere Mechanismen unterstützen. Ich empfehle Restlet.

    
Jim Ferrans 07.01.2010 06:06
quelle
0

Mozilla Persona

Seit dieser Frage wurde die Mozilla Foundation (der Hersteller der Firefox Browser) hat das Problem der einfachen Benutzerauthentifizierung übernommen. Ihre Lösung ist Mozilla Persona , "ein Anmeldesystem für das Web". Entwickelt, um für Benutzer und für Entwickler einfach zu sein. Die Identität des Benutzers ist eine E-Mail-Adresse. Siehe Wikipedia-Artikel .

Aktualisieren

Mozilla hat die Arbeit an Persona im Grunde aufgegeben, aber nicht ganz getötet Projekt.

    
Basil Bourque 01.02.2014 23:21
quelle