it-swarm.com.de

Grundlegende HTTP- und Bearer-Token-Authentifizierung

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

Ich habe folgendes ausprobiert:

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. Vermisse ich etwas?

98
Azngeek

Versuchen Sie dies, um die Standardauthentifizierung unter der folgenden URL zu pushen:

curl -i http://username:[email protected]/api/users -H "Authorization: Bearer mytoken123"
               ^^^^^^^^^^^^^^^^^^

Wenn man oben nicht funktioniert, dann hat man nichts damit zu tun. Probieren Sie die folgenden Alternativen aus.

Sie können das Token unter einem anderen Namen weitergeben. Weil Sie die Autorisierung aus Ihrer Anwendung heraus bearbeiten. Sie können diese Flexibilität also problemlos für diesen speziellen Zweck nutzen.

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

Beachten Sie, dass ich den Header in Application-Authorization Geändert habe. Fangen Sie in Ihrer Anwendung das Token unter diesem Header ab und verarbeiten Sie, was Sie tun müssen.

Sie können auch token über die POST -Parameter übergeben und den Wert des Parameters auf der Serverseite abrufen. Zum Beispiel das Übergeben eines Tokens mit dem Parameter curl post:

-d "auth-token=mytoken123"
59
Sabuj Hassan

Standard ( https://tools.ietf.org/html/rfc675 ) besagt, dass Sie Folgendes verwenden können:

  • Form-Encoded Body Parameter: Berechtigung: Inhaber mytoken123
  • URI-Abfrageparameter: access_token = mytoken123

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

31
Janek Olszak

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

In nginx würden Sie es neu schreiben, damit der Upstream-Proxy (Ihre restliche API) nur auth ist:

proxy_set_header Authorization $http_x_api_token;

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

4
shredding

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

2
Iiridayn

locken --anyauth

Lässt curl die Authentifizierungsmethode selbst herausfinden und die sicherste Methode verwenden, die die Gegenstelle unterstützen soll. Dies geschieht, indem zuerst eine Anforderung ausgeführt und die Antwort-Header überprüft werden, wodurch möglicherweise ein zusätzlicher Netzwerk-Roundtrip ausgelöst wird. Dies wird verwendet, anstatt eine bestimmte Authentifizierungsmethode festzulegen, die Sie mit --basic, --digest, --ntlm und --negotiate ausführen können.

1
bbaassssiiee