Ich entwerfe eine REST-API mit Autorisierung / Authentifizierung über einen API-Schlüssel.
Ich habe versucht, herauszufinden, was der beste Ort dafür ist, und habe herausgefunden, dass viele Leute die Verwendung eines benutzerdefinierten HTTP-Headers vorschlagen, wie zum ProjectName-Api-Key
Beispiel:
ProjectName-Api-Key: abcde
es ist aber auch möglich und ideologisch korrekt, den Authorization
Header mit einem benutzerdefinierten Schema zu verwenden, zB:
Authorization: ApiKey abcde
Andererseits stellte ich fest, dass ein benutzerdefiniertes Autorisierungsschema von einigen Clients unerwartet und nicht unterstützt werden kann und ohnehin zu benutzerdefiniertem Code führt. Daher ist es besser, einen benutzerdefinierten Header zu verwenden, da Clients keine Erwartungen daran haben.
Auf welche Weise möchten Sie einen API-Schlüssel senden?
Bearer
Schema ausschließlich mit oAuth2 verwendet. Wenn Sie es getrennt von oAuth anwenden, wird es als missbräuchlich angesehen. Warum ist es richtig, dieses Schema zu verwenden, wenn es kein oAuth gibt? Übrigens hatte ich Probleme mit der Auswahl eines Autorisierungstyps für meine API. Die API wird nur für einen vertrauenswürdigen Dienst verfügbar sein. Daher habe ich den Clientanmeldeinformationsfluss von oAuth2 untersucht und in meinem Fall keinen Vorteil im Vergleich zu ApiKey festgestellt.
ApiKey
umbenannt und als Access Token
dem Client gewährt interpretiert wird. Das ist eine Art philosophischer Aspekt. Ich habe mich entschieden, keine komplexen Definitionen mitzubringen, wenn sich mein Fall in einfachen Worten beschreiben lässt, und habe mich dafür entschieden, ihn einfach "ApiKey" zu nennen. Wenn Ihr Protokoll den oAuth-Standard implementiert, kann ich der Verwendung zustimmen Bearer
, aber ich denke, dass dieses Schema nicht angewendet werden kann.
Authorization: Bearer <token>
Header und es gab nie ein einziges Problem damit. Die Token sind JWTs .