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:
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:
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?
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.
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 weiterleitenDer 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
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.
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.
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 .
Mozilla hat die Arbeit an Persona im Grunde aufgegeben, aber nicht ganz getötet Projekt.
Tags und Links api restful-authentication rest web-services