2016-05-05 11 views
1

Ein Client muss sich beim ersten Mal mit einem Benutzernamen/Passwort anmelden. Ein JWT-Token wird für zukünftige Anforderungen zurückgegeben. Das Token verfügt über eine Benutzer-ID, damit der Server die Ressource des Benutzers aus der Datenbank abrufen kann.REST api - Wie sollte der Client Benutzer-ID an die Anfrage-URL für seine Benutzer-Ressource liefern?

Das Problem, das ich habe, ist der Client muss die Anfrage URL, um seine Ressource zu aktualisieren, sagen wir POST/Benutzer/{Benutzer-ID}. Wie sollte ich die Benutzer-ID für den Client erhalten? Ich kann nicht auf das JWT-Token zugreifen, das in einem httpOnly-sicheren Cookie gespeichert ist. Soll ich die Benutzerkennung irgendwie auf dem Client speichern? Damit es für die URL verwendet werden kann?

+0

Wenn Sie für die API verantwortlich sind, warum können Sie die Benutzerinformationen auf der Serverseite nicht vom Token abrufen? –

+0

Ich kann das tun, aber wie sollte die URL aussehen, wenn ich REST folgen möchte? Ich dachte ursprünglich an POST an/Benutzer, aber sollte die URL nicht speziell auf eine Ressource zielen, die ich ändern möchte? Vielleicht POST/Benutzer/Selbst? –

Antwort

0

Ich sehe dein Problem jetzt. Sie haben Angst davor, einige der Vorteile eines RESTFUL api, eines eindeutigen Ressourcen-Locators, zu verlieren. Ich habe oft eine Reihe von URIs, die mit dem Pfad beginnen, der angibt, dass sich die Vorgänge auf dem aktuell authentifizierten Benutzer befinden.

/current/profile 
/current/blog_posts 

In solchen Fällen ziehe ich den Benutzer aus dem Anforderungskontext auf dem Server, die ich durch Parsen der JWT-Token erhalten kann.

Und wenn ich auf anderen Benutzern betreiben wollen verwende ich die Kennung anstelle

/{{user_id}}/profile 
/{{user_id}}/blog_posts 

Ich bin mir nicht sicher, ob dies streng RESTFUL ist, aber es gibt Anwender meiner API eine stabile und auffindbar URI. Ich habe dieses Muster mit einer Reihe von Projekten und Teams ohne Beanstandung verwendet.

Wenn Sie wirklich müssen eine Benutzerkennung zwei Ideen bekommen Idee in den Sinn kommt:

  • Return die user_id zusammen mit dem jwt Token.
  • Erstellen Sie einen zusätzlichen API-Aufruf , um die user_id vom Server abzurufen, und verwenden Sie diese für alle nachfolgenden Anrufe .

Oh, kommt eine andere Option in den Sinn. Ändern Sie Ihre Vorstellung von einer Benutzer-ID und verwenden Sie stattdessen den Benutzernamen (den Sie bereits haben).