Erholsamen Benutzer-Authentifizierung service
Hey Leute, dies scheint die Diskussion ziemlich oft, aber ich will eine einfache, verwässert Frage herum tun Authentifizierung mit RESTful services. Das Szenario ist wie folgt:
- Es ist ein system, dass die Häuser registrierte Benutzer für eine Anwendung. Das system stellt eine RESTful-API für den Zugriff auf diesen Benutzer.
- Es ist ein front-end-Anwendung, die über ein login-Formular. Die Anwendung kann entweder intern oder extern.
- Die front-end-Anwendung benötigt, um die Daten in der User-system, einen Benutzer zu authentifizieren.
Nun ist die Frage, wie die Authentifizierung eines Benutzers, dessen Anmeldeinformationen (Benutzername/Passwort) eingegeben werden, in der client-Anwendung gegen die Daten in der User-system, so dass es sicher und performant? Für die Zwecke dieser Frage, angenommen, die client-Anwendung ist von der internen auf eine Art von Intranet, aber die Anwendungen nicht unbedingt auf der gleichen Maschine und können nur kommunizieren über den service.
Ich verstehe die Idee, die Anwendung als "hypermedia-getriebenen" aber wir sollten in der Lage sein zu Filterung/Suche-Dienste. Betrachten Sie zum Beispiel die Ressourcen und die API wie folgt:
- http://example.com/users
- BEKOMMEN - ruft alle Benutzer ("paged", " hypermedia-getriebene)
- POST - erstellt neue Benutzer
- SETZEN/LÖSCHEN nicht unterstützt
- http://example.com/users/[id]
- GET - gibt eine vollständige Repräsentation eines Benutzers mit der id = {id}
- SETZEN - updates Benutzer, nimmt in einer definierten Medientyp
- LÖSCHEN - löscht den Benutzer (mit entsprechender Berechtigung)
- POST nicht unterstützt
Basierend auf den oben, meine Idee wäre, die client-Anwendung auf der user-Auflistung, Filterung nach Benutzernamen. Der service den das gehashte Passwort und Salz an den client, der client die Authentifizierung ausführen.
Gedanken?
- Können Sie etwas konkreter über das, was die Frage ist? Ich bin eine schwierige Zeit zu verstehen, welche Art von feedback Sie möchten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich verstehe deine Frage richtig, Sie sind auf der Suche zu implementieren, die einen generischen service, der Authentifizierung verarbeiten, so dass Sie wieder verwenden können es für verschiedene Anwendungen.
Ich schlage vor, Sie nehmen einen Blick auf OAuth, die gebaut wurde, genau dieses problem domain.
Übergeben Sie den Benutzernamen und das Salz zurück ist unnötig und ein echtes Sicherheitsrisiko.
Vielleicht könnten Sie überlegen, ob dieser Ansatz:
Den client übergibt den Benutzernamen und das Kennwort an den server über Basic-Authentifizierung
Dem server holt sich das verschlüsselte Kennwort für den Benutzernamen zusammen mit dem Salz
Dem server verschlüsselt das Passwort mit einigen Verschlüsselungsverfahren, mit dem Salz zu helfen, den Algorithmus (Ruby-code folgt):
Gibt es mehrere Orte, die diese Art von Ansatz, aber ich Mach es gerne im Rack.
Letzten Punkt, tun es alle auf eine HTTPS-Verbindung
Stormpath
Stormpath Unternehmen spezialisiert auf Benutzer-login-management-API und service für Entwickler. Verwenden Sie eine REST JSON Ansatz.
Gibt es einige andere Unternehmen, die scheinen zu versuchen, in diesem neuen Bereich der Authentifizierung-as-a-service, aber Stormpath ist der einzige, den ich kenne, der ist, um es gewidmet.
Ersten, die Sie nicht möchten, dass der client die Authentifizierung ausführen, wie wäre es dann einfach ein Programm schreiben, dass Pausen in Ihren Dienst.
Stattdessen verwenden Sie einfach einen Authentifizierungs-Mechanismus, wie Die HTTP-Basic oder HTTP Digest.
Beachten Sie, dass wenn Sie sind unter Verwendung von Java, die Restlet framework bietet Abfangjäger, genannt "Wächter", die Unterstützung dieser und andere Mechanismen. Ich empfehle Restlet.
Mozilla Persona
Da wurde diese Frage gepostet, die Mozilla Foundation (der Hersteller der Firefox browser) hat auf das problem der einfache Benutzer-Authentifizierung. Ihre Lösung ist Mozilla Persona, "ein Anmelde-system für das Web". Entwickelt, um einfach für die Nutzer und für Entwickler. Die Identität des Benutzers wird eine E-Mail-Adresse. Sehen Wikipedia-Artikel.
Update
Mozilla hat im Grunde aufgegeben, die Arbeit an Persona aber nicht ganz getötet das Projekt.