Benutzerdefinierte Verwendung des Autorisierungsheaders in einer REST-API

9

Ich erstelle eine REST-API, in der Clients mithilfe von Clientzertifikaten authentifiziert werden. Ein Client ist in diesem Fall kein einzelner Benutzer, sondern eine Art Präsentationsebene. Benutzer werden mithilfe eines benutzerdefinierten Ansatzes authentifiziert, und es liegt in der Verantwortung der Präsentationsebene, sicherzustellen, dass dies ordnungsgemäß durchgeführt wird (Hinweis: Ich weiß, dass dies nicht der richtige Ansatz ist, aber die API ist nicht öffentlich).

Ich möchte den Benutzernamen für jede Anfrage übergeben (nicht das Passwort), bin mir aber nicht sicher, wo ich das tun soll. Wäre es eine gute Idee, den Authorization-Header zu verwenden?

Matsen75
quelle

Antworten:

20

Die Verwendung des Authorization-Headers scheint das Richtige zu sein. Dies ist der gesamte Zweck des Autorisierungsheaders.

Von http://tools.ietf.org/html/rfc7235#section-4.2 :

Das Headerfeld "Autorisierung" ermöglicht es einem Benutzeragenten, sich bei einem Ursprungsserver zu authentifizieren - normalerweise, aber nicht unbedingt, nachdem er eine 401-Antwort (nicht autorisiert) erhalten hat. Sein Wert besteht aus Anmeldeinformationen, die die Authentifizierungsinformationen des Benutzeragenten für den Bereich der angeforderten Ressource enthalten.

Wenn Sie ein eigenes Authentifizierungsschema haben, dokumentieren Sie es, aber Sie müssen das Rad nicht neu erfinden.

Zach Dennis
quelle
3
Es ist nicht nur scheinen wie das Richtige, es ist das Richtige. (Ich habe dies den ganzen Tag recherchiert.) Abschnitt 4.1 in RFC 7235 demonstriert ausdrücklich die Verwendung eines benutzerdefinierten Schemas "Newauth" in "Zum Beispiel" zusammen mit einem Standardschema "Basic", mit dem der Client die Wahl eines der beiden Schemata treffen kann . Das heißt, wenn Sie ein "Standard" -Schema verwenden, sollten Sie es richtig verwenden. Zachs Antwort ist richtig und Filip ist falsch .
Stephen P
3

Ich würde nicht empfehlen, dass Sie einen Standard-HTTP-Header nicht standardmäßig verwenden. In erster Linie, weil dies für andere Entwickler irreführend sein kann, die wissen, wie der AuthoriziationHeader für die HTTP-Authentifizierung verwendet werden soll, aber auch, um potenzielle Probleme mit anderen Teilen Ihres Stacks zu vermeiden, bei denen die Kenntnis des gleichen Anforderungsheaders widersprüchlich ist.

In jedem Fall hindert Sie nichts daran, einen benutzerdefinierten, nicht standardmäßigen X-Authorization-UserHeader speziell für Ihre Zwecke zu verwenden.

Filip Dupanović
quelle
100% stimmten zu. Wenn Sie etwas Benutzerdefiniertes tun möchten, X-sind die vorangestellten Header dafür gedacht. Wenn Sie einen Standardheader verwenden, verwenden Sie ihn nicht für ungewöhnliche oder unerwartete Ereignisse.
Carson63000
2
Ich dachte nur, ich sollte erwähnen, dass das "X-" veraltet ist: stackoverflow.com/questions/3561381/…
Matsen75
Bedeutet das laut dieser Antwort, dass Amazon S3 es falsch macht? docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
Tom Lianza
4
-1. Wie von Zach Dennis erwähnt, ist der Authorization-Header im Gegensatz zu den meisten anderen HTTP-Headern so konzipiert, dass er erweitert werden kann, und es gibt eine klar spezifizierte Methode zum Definieren Ihres eigenen Autorisierungsschemas. Stellen Sie in einer Nussschale sicher, dass Sie einen benutzerdefinierten Autorisierungsschema-Namen verwenden.
Lie Ryan