2016-06-03 16 views
0

Ich bin neu in RESTful Web Services und ich versuche, meinen ersten sicheren Web-Service mit JAX-RS zu entwerfen. Aber ich habe Zweifel.JAX-RS - Authentifizierung und Benutzerdaten in RESTful Web-Services

Stellen Sie sich vor, ich habe eine Messenger-API, wo ich einen "/ Posts" -Webdienst habe, der mir alle Posts für den Benutzer geben würde, der ihn anruft. Also habe ich einen Basisauthentifizierungsfilter entwickelt, der die Authentifizierung durchführt, und wenn ein gültiger Benutzer vorhanden ist, übergibt er die Anfrage an den/posts-Dienst, der eine Liste von Posts für den Benutzer bereitstellt. Jetzt ist das Problem, der Benutzer in meiner DB hat eine Benutzer-ID, die dem Benutzer nicht ausgesetzt ist. Innerhalb des/posts-Dienstes benötige ich die userId, um die Posts des anfragenden Benutzers zu erhalten. Also mein Filter macht die Authentifizierung und erhält die userId für den angemeldeten Benutzer.

Meine Frage ist, wie diese userId an die/Posts Web-Service?

Meine Vorgehensweise besteht jetzt darin, diese userId als Anforderungsheaderinfo im Filter hinzuzufügen und sie dann an den/posts-Dienst zu übergeben.

Aber ich bin verwirrt, wenn dies der richtige Ansatz ist, oder sollte dieses Szenario auf eine andere Art elegant gehandhabt werden?

Bitte helfen Sie mir zu verstehen, was der beste Ansatz sein könnte, um es zu tun.

Antwort

1

Es klingt, als würden Sie Ihre eigene Sicherheit erstellen, wenn es bereits etablierte Standards gibt, die dort gut dokumentiert sind. Ich habe in der Vergangenheit OAuth- und JWT-Token verwendet, um Rest-Endpunkte zu sichern. Abhängig von Ihren spezifischen Anforderungen können Sie möglicherweise die Standardauthentifizierung verwenden.

Wenn es um Sicherheit geht, ist es selten, dass Sie in der Lage sind, einen besseren Job als die Experten zu machen, also wenn Sie einem Standard folgen können, sollten Sie wahrscheinlich. Der zusätzliche Vorteil, dass der nächste Mensch eine lange Zeit hat, hat die ganze Dokumentation und Unterstützung, um mitzukommen.

Update:

Nur mit dem Benutzer-ID in der Anforderung nicht ausreichen würde. Jeder, der die Benutzer-ID einer anderen Person kennt, könnte diese Person fälschen und als anderen Benutzer an den Endpunkt senden.

"Meine Frage ist, wie diese userId an den/posts-Webdienst übergeben wird?"

Sitzungen können zum Speichern der internen Benutzer-ID verwendet werden. Wenn Sie bereits mit einer Sitzung angemeldet sind, sollten Sie die Benutzer-ID aus der Sitzung abrufen können. Wenn Sie JWT verwenden (was zustandslos ist), können Sie alle Informationen, die Sie im Token gespeichert haben, abrufen, um dasselbe zu erreichen.

+0

Ich habe daran gedacht, die Authentifizierungsimplementierung zu OAuth oder einem Standard zu ändern. Da die Authentifizierung in dem Filter durchgeführt wird, sollte der Dienst nicht damit belastet werden, welcher Authentifizierungsmechanismus befolgt wird. Meine einzige Frage ist, wie man die Benutzer-ID an den Dienst weitergibt. Sie haben erwähnt, dass Sie Sitzungen verwenden, aber ich habe gelesen, dass REST-Ressourcen staatenlos sind. Wie erstelle ich eine Sitzung, und wenn ich das auch tue, ist dies eine gute Übung? Ist das nicht wieder ein Stateful? Können Sie bitte einen Link für die JWT, die Sie erwähnt haben, zur Verfügung stellen. Es kann nützlich sein. – Manish

+0

https://auth0.com/learn/json-web-tokens/ https://jwt.io/ REST-Dienste können zustandslos sein, es ist auch zulässig, Rest-Endpunkte innerhalb einer statusbehafteten Anwendung zu haben. Was das Erstellen einer Sitzung betrifft, hängt das vollständig von der Sprache ab, in der Sie Ihren Webservice implementieren. PHP hat eine andere Sitzungsverwaltung als der Frühling. Cookies könnten ebenfalls eine Option sein. – blur0224

+0

Danke für den Link. – Manish