Ich erstelle eine API, die Zugriffstoken verwendet, damit ich die Nutzung zwischen verschiedenen Abteilungen und für die Zugriffskontrolle verfolgen kann. Mein Plan ist es, die HTTP-Verben angemessen zu verwenden - GET
Informationen abzurufen, POST
hinzuzufügen, zu DELETE
löschen usw.
Meine Frage ist, wie ich mit Zugriffstoken bei den GET-Aufrufen umgehen soll.
Option eins:
Soll das Zugriffstoken als Teil der Abfragezeichenfolge bereitstellen : /api/users/?token=ACCESSTOKEN
. Das Problem dabei ist, dass ACCESSTOKEN in Serverprotokollen angezeigt wird. Diese Methode unterscheidet sich auch von POST- oder DELETE-Anforderungen, bei denen das Token über den Body übergeben wird.
Option zwei:
Geben Sie einen Text für die Anforderung an (wie in einer POST
Anforderung), und einer der Parameter ist das Token. Mein Problem hierbei ist, dass andere Entwickler in meinem Unternehmen mir mitteilen, dass dies keine "echte GET-Anfrage" ist, da ich Daten weitergebe. Die URL, die sie nennen, sieht einfach so aus /api/users/
und wird token=ACCESSTOKEN
im Körper bereitgestellt.
Option drei:
Lass es fallen GET
und zwinge alles dazu, a zu sein POST
. Diese Idee gefällt mir nicht, da ich für viele dieser API-Aufrufe keine neuen Ressourcen erstelle. Ich gebe einfach Daten zurück, die sich zufällig hinter einer API befinden, für die eine Autorisierung erforderlich ist.
Gibt es eine Option, die mir fehlt oder die ich verfeinern sollte? Ich mag Option 2, bin aber sensibel für die Bedenken anderer Abteilungsentwickler.
quelle
Authorization
.Antworten:
Option 4: Autorisierungsheader und RFC 6750 (Bearer Tokens)
Die Lösung, nach der Sie suchen, wurde bereits als Teil des OAuth2-Standards angegeben, steht jedoch für sich und ist in Ihrem Szenario hilfreich.
https://tools.ietf.org/html/rfc6750
Alle Anforderungen vom Client werden in einem Inhaber-Token (Ihrem Zugriffstoken) übergeben, und es sieht aus wie jeder andere Anforderungsheader an den Server. Die Anfrage selbst sieht folgendermaßen aus:
Da es sich um einen weit verbreiteten öffentlichen Standard handelt, müssen Sie sich keine Gedanken über die Definition des Verhaltens machen. Zeigen Sie einfach clientseitige Entwickler auf den RFC. Sie könnten auch in Betracht ziehen, den Rest des OAuth2-Standards sowohl als Ressourcenserver als auch als Autorisierungsserver zu implementieren , aber das ist viel mehr Arbeit.
quelle
Warum verwenden Sie keine Anforderungsheader? Dies trennt Authentifizierungs- / Autorisierungsdaten von den tatsächlich aussagekräftigen Daten der Anforderung und kann für jede Art von Anforderung verwendet werden (die Verwendung eines Anforderungshauptteils auf einem Get sollte normalerweise nicht durchgeführt werden.)
Wenn Sie über eine Berechtigung in den Headern verfügen, können Sie den Benutzer authentifizieren, bevor Sie den Hauptteil der Anforderung analysieren. Dies ist von Vorteil, wenn Ihr System keine Zeit damit verschwenden soll, Daten von einem nicht autorisierten Benutzer zu analysieren.
quelle