Ich habe mich gefragt, ob es akzeptabel ist, benutzerdefinierte Daten in einen HTTP-Autorisierungsheader einzufügen. Wir entwerfen eine RESTful-API und benötigen möglicherweise eine Möglichkeit, eine benutzerdefinierte Autorisierungsmethode anzugeben. Nennen wir es als FIRE-TOKEN
Authentifizierung.
Wäre so etwas gültig und erlaubt gemäß der Spezifikation: Authorization: FIRE-TOKEN 0PN5J17HBGZHT7JJ3X82:frJIUN8DYpKDtOLCwo//yllqDzg=
Der erste Teil der zweiten Zeichenfolge (vor dem ':') ist der API-Schlüssel, der zweite Teil ist ein Hash der Abfragezeichenfolge.
quelle
Fügen Sie es in einen separaten, benutzerdefinierten Header ein.
Das Überladen der Standard-HTTP-Header wird wahrscheinlich mehr Verwirrung stiften als es wert ist und das Prinzip der geringsten Überraschung verletzen . Dies kann auch zu Interoperabilitätsproblemen für Ihre API-Client-Programmierer führen, die handelsübliche Toolkits verwenden möchten, die nur die Standardform typischer HTTP-Header (z. B.
Authorization
) verarbeiten können.quelle
Authorization
Header mit Ihrem eigenen benutzerdefinierten Schema sollte mehr als ausreichend sein. Außerdem vermeiden Sie Origin-Anfragen vor dem Flug, wie @wilmoore angibt. Benutzerdefinierte Schemata stören keinen einigermaßen modernen HTTP-Server, den ich kenne. Wenn Sie Ihr eigenes Schema verwenden, müssen Sie es selbst analysieren - keine Bibliothek sollte in Konflikt geraten (andernfalls ist die Bibliothek schlecht geschrieben).Authorization
Header und nicht in einem benutzerdefinierten Header besteht darin, dass Proxys und Protokollierer die Informationen als vertraulich behandeln.Nein, dies ist keine gültige Produktion gemäß der Definition "Anmeldeinformationen" in RFC 2617 . Sie geben ein gültiges Auth-Schema an, aber die Auth-Param-Werte müssen die Form haben
token "=" ( token | quoted-string )
(siehe Abschnitt 1.2), und in Ihrem Beispiel wird "=" nicht verwendet.quelle
Alte Frage, die ich kenne, aber für Neugierige:
Ob Sie es glauben oder nicht, dieses Problem wurde vor ca. 2 Jahrzehnten mit HTTP BASIC gelöst, das den Wert als base64-codierten Benutzernamen: password übergibt. (Siehe http://en.wikipedia.org/wiki/Basic_access_authentication#Client_side )
Sie könnten das Gleiche tun, so dass das obige Beispiel wie folgt aussehen würde:
quelle