Ich entwickle derzeit eine REST-API, die für die Entwicklungsumgebung 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 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. Vermisse ich also etwas?
400 Bad request
. Dumm.Antworten:
Versuchen Sie dies, um die Basisauthentifizierung unter URL zu pushen:
Wenn oben nicht funktioniert, haben Sie nichts damit zu tun. Versuchen Sie also die folgenden Alternativen.
Sie können das Token unter einem anderen Namen übergeben. Weil Sie die Autorisierung aus Ihrer Anwendung bearbeiten. Sie können diese Flexibilität also problemlos für diesen speziellen Zweck nutzen.
Beachten Sie, dass ich den Header in geändert habe
Application-Authorization
. Fangen Sie also in Ihrer Anwendung das Token unter diesem Header ab und verarbeiten Sie, was Sie tun müssen.Sie können auch
token
diePOST
Parameter durchlaufen und den Wert des Parameters von der Serverseite abrufen. Zum Beispiel Token mit Curl-Post-Parameter übergeben:quelle
-v
param aus. Sie werden feststellen, dass esAuthorization: Basic Ym9zY236Ym9zY28=, Authorization: Bearer mytoken123
auf Anfrage Header sendet . Wenn Sie dies von Ihrem Server aus überprüfen, werden Sie feststellen, dass der Autorisierungsheader wie dieserAuthorization: Basic Ym9zY236Ym9zY28=, Bearer mytoken123
durch Komma getrennt ist. Also, ich denke, ich sollte Ihnen Alternativen vorschlagen.Standard ( https://tools.ietf.org/html/rfc6750 ) sagt, dass Sie Folgendes verwenden können:
Es ist also möglich, viele Bearer Token mit URI zu übergeben, dies wird jedoch nicht empfohlen (siehe Abschnitt 5 im Standard).
quelle
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:
... während nginx den ursprünglichen Authorization-Header verwenden kann, um HTTP AUth zu überprüfen.
quelle
Ich hatte ein ähnliches Problem - Gerät und Benutzer am Gerät authentifizieren. Ich habe einen
Cookie
Header neben einemAuthorization: Bearer...
Header verwendet.quelle
Cookie
Header wird bereits häufig zur Authentifizierung verwendet.quelle
Es gibt eine andere Lösung zum Testen von APIs auf dem Entwicklungsserver.
HTTP Basic Authentication
nur für Web - RoutenWebserverkonfiguration für
nginx
undLaravel
wäre wie folgt:Authorization: Bearer
übernimmt die Aufgabe, den Entwicklungsserver gegen Webcrawler und andere unerwünschte Besucher zu verteidigen.quelle
Mit nginx können Sie beide Token wie folgt senden (obwohl dies gegen den Standard verstößt):
Dies funktioniert, solange das Basistoken zuerst vorhanden ist. Nginx leitet es erfolgreich an den Anwendungsserver weiter.
Und dann müssen Sie sicherstellen, dass Ihre Anwendung den Träger ordnungsgemäß aus der obigen Zeichenfolge extrahieren kann.
quelle