API-Key-in-Inhalt oder -Header


14

Ich arbeite gerade an einer API und wollte nur Meinungen dazu sammeln, wo der beste Ort für die Übermittlung des API-Schlüssels sein sollte. Ich weiß, dass sollte nicht in der URL gehen, dies verlässt den Anforderungsheader oder den Nachrichtentext.

Wenn ich es in den Header setze, kann ich eine generische Methode zum Herausziehen finden, die für alle Services verwendet werden kann. Die angegebene Spezifikation möchte es jedoch im Body haben (dh in einem JSON-String, der als Teil von enthalten ist das serialisierte Objekt im POST-Body).


Beachten Sie auch, dass nicht alle Anforderungstypen einen Textkörper haben sollten. Wenn Sie eine Anforderung ohne einen Textkörper validieren möchten, muss sich der Schlüssel im Header befinden.
Whymarrh

Antworten:


11

In HTTP gibt es dafür einen AuthorizationHeader.

Während es normalerweise verwendet wird, um Benutzeranmeldeinformationen bereitzustellen, kann es im Fall einer API die ID des Clients und den entsprechenden API-Schlüssel enthalten.

Es gibt mehrere Vorteile:

  • Unterstützung aus verschiedenen Frameworks. Viele Frameworks erwarten AuthorizationHeader, um die Authentifizierung durchzuführen. Wird es nicht verwendet, muss zusätzlicher Code geschrieben werden, um diese Frameworks mit benutzerdefinierten Werten zu versorgen.

  • Unterstützung durch verschiedene Tools. Zum Beispiel CURL.

  • Weniger "WTF wo finde ich diesen API-Schlüssel ?!" von neuen Entwicklern, die dem Team beitreten (oder Entwicklern, die neue Clients für Ihre API entwerfen).

  • Sie können dann HTTP-Statuscodedefinitionen verwenden 401 Unauthorized, z. B . :

    Die Antwort MUSS ein WWW-Authenticate-Header-Feld enthalten. [...] Der Client KANN die Anfrage mit einem geeigneten Authorization-Header-Feld wiederholen.

Das Verschieben in den Hauptteil der Anforderung kann schnell schmerzhaft werden. Die meisten Frameworks und Tools machen es nicht sehr einfach, einer Anfrage einen Body hinzuzufügen, was Ihre API möglicherweise schwieriger macht, als es sein muss.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.