Frage Einfache HTTP- und Inhaber-Token-Authentifizierung


Ich entwickle gerade eine REST-API, die für die Entwicklungsumgebung HTTP-Basic geschützt ist. Da die echte Authentifizierung über ein Token erfolgt, versuche ich immer noch herauszufinden, wie zwei Autorisierungsheader gesendet werden.

Ich habe es versucht:

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Authorization: Bearer mytoken123"

Ich könnte zum Beispiel die HTTP-Authentifizierung für meine IP deaktivieren, aber da ich normalerweise in verschiedenen Umgebungen mit dynamischen IPs arbeite, ist dies keine gute Lösung. Also vermisse ich etwas?


76
2018-03-06 16:16


Ursprung


Antworten:


Versuchen Sie diesen, um die Standardauthentifizierung an der URL zu drücken:

curl -i http://username:password@dev.myapp.com/api/users -H "Authorization: Bearer mytoken123"
               ^^^^^^^^^^^^^^^^^^

Wenn über eins nicht funktioniert, dann hast du nichts damit zu tun. Versuchen Sie die folgenden Alternativen.

Sie können das Token unter einem anderen Namen übergeben. Weil Sie die Autorisierung von Ihrer Anwendung bearbeiten. So können Sie diese Flexibilität für diesen speziellen Zweck einfach nutzen.

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Application-Authorization: mytoken123"

Beachten Sie, dass ich die Kopfzeile in geändert habe Application-Authorization. So fangen Sie von Ihrer Anwendung den Token unter dieser Kopfzeile und verarbeiten, was Sie tun müssen.

Eine andere Sache, die Sie tun können, ist, die token durch das POST Parameter und greifen Sie den Wert des Parameters von der Server-Seite. Zum Beispiel übergeben Token mit Curl Post-Parameter:

-d "auth-token=mytoken123"

42
2018-03-21 17:04



Standard (https://tools.ietf.org/html/rfc6750) sagt, dass Sie verwenden können:

  • Formkodierter Körper Parameter: Autorisierung: Träger mytoken123
  • URI-Abfrageparameter: access_token = mytoken123

Es ist also möglich, viele Bearer Token mit URI zu übergeben, aber davon wird abgeraten (siehe Abschnitt 5 im Standard).


26
2017-08-12 07:36



Locke --anyauth

Gibt Curl an, um die Authentifizierungsmethode selbst herauszufinden, und verwendet die   das sicherste, was die entfernte Seite zu unterstützen behauptet. Dies geschieht durch   zuerst eine Anfrage machen und die Antwort-Header überprüfen   möglicherweise eine zusätzliche Netzwerk-Hin-und Rückfahrt induzieren. Dies wird verwendet   anstatt eine bestimmte Authentifizierungsmethode zu setzen, was Sie können   Tun Sie das mit --basic, --digest, --ntlm und   --verhandeln.


1
2018-03-26 20:30



Wenn Sie einen Reverse-Proxy wie z. B. nginx dazwischen verwenden, können Sie ein benutzerdefiniertes Token definieren, z X-API-Token.

In nginx würden Sie es so umschreiben, dass der Upstream-Proxy (Ihre Rest-API) nur auth ist:

proxy_set_header Authorization $http_x_api_token;

... während nginx den ursprünglichen Autorisierungsheader verwenden kann, um HTTP AUth zu überprüfen.


1
2018-06-21 14:35



Ich hatte ein ähnliches Problem - Gerät und Benutzer am Gerät authentifizieren. Ich benutzte eine Cookie Kopfzeile neben einem Authorization: Bearer... Header.


0
2018-04-10 00:43