So setzen Sie den Autorisierungsheader mit curl

397

Wie übergebe ich den Autorisierungsheader mit cURL? (ausführbar in /usr/bin/curl).

Vidya
quelle

Antworten:

394

http://curl.haxx.se/docs/httpscripting.html

Siehe Teil 6. HTTP-Authentifizierung

HTTP-Authentifizierung

Die HTTP-Authentifizierung ist die Möglichkeit, dem Server Ihren Benutzernamen und Ihr Kennwort mitzuteilen, damit überprüft werden kann, ob Sie die von Ihnen ausgeführte Anforderung ausführen dürfen. Die in HTTP verwendete Standardauthentifizierung (die standardmäßig vom Typ Curl verwendet wird) basiert auf einfachem Text. Dies bedeutet, dass Benutzername und Kennwort nur geringfügig verschleiert gesendet werden, aber dennoch vollständig von jedem gelesen werden können, der im Netzwerk zwischen Ihnen und dem Remoteserver schnüffelt.

So weisen Sie curl an, einen Benutzer und ein Kennwort für die Authentifizierung zu verwenden:

curl --user name:password http://www.example.com

Die Site erfordert möglicherweise eine andere Authentifizierungsmethode (überprüfen Sie die vom Server zurückgegebenen Header), und dann sind --ntlm, --digest, --negotiate oder sogar --anyauth möglicherweise Optionen, die zu Ihnen passen.

Manchmal ist Ihr HTTP-Zugriff nur über einen HTTP-Proxy verfügbar. Dies scheint bei verschiedenen Unternehmen besonders häufig zu sein. Ein HTTP-Proxy benötigt möglicherweise einen eigenen Benutzer und ein eigenes Kennwort, damit der Client ins Internet gelangen kann. Führen Sie Folgendes aus, um diejenigen mit Locken anzugeben:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

Wenn Ihr Proxy die Authentifizierung mithilfe der NTLM-Methode erfordert, verwenden Sie --proxy-ntlm. Wenn Digest erforderlich ist, verwenden Sie --proxy-Digest.

Wenn Sie eine dieser Benutzer- + Kennwortoptionen verwenden, aber den Kennwortteil weglassen, fordert curl interaktiv zur Eingabe des Kennworts auf.

Beachten Sie, dass beim Ausführen eines Programms möglicherweise dessen Parameter angezeigt werden, wenn die laufenden Prozesse des Systems aufgelistet werden. Daher können andere Benutzer Ihre Kennwörter möglicherweise überwachen, wenn Sie sie als einfache Befehlszeilenoptionen übergeben. Es gibt Möglichkeiten, dies zu umgehen.

Es ist erwähnenswert, dass die HTTP-Authentifizierung zwar so funktioniert, aber sehr viele Websites dieses Konzept nicht verwenden, wenn sie Anmeldungen usw. bereitstellen. Weitere Informationen hierzu finden Sie im Kapitel Web-Anmeldung weiter unten.

Oli
quelle
16
@Vixed Bei dieser Frage geht es ausdrücklich nicht um PHP. [Was stimmt nicht mit den Ergebnissen von Google]?
Oli
Die Frage bezieht sich auf die Autorisierung und nicht auf die Authentifizierung. Vielleicht sollte das OP den Titel der Frage ändern
Jam
320

Fügen Sie einfach hinzu, damit Sie nicht durchklicken müssen:

curl --user name:password http://www.example.com

oder wenn Sie versuchen, eine Authentifizierung für OAuth 2 zu senden:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
Tony
quelle
15
Viele APIs verwenden jetzt Header-Autorisierungstoken. Die -HOption ist großartig.
Eliocs
14
Wenn Sie -u oder --user verwenden, verschlüsselt Curl die Anmeldeinformationen in Base64 und erstellt einen Header wie den folgenden:-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski
Ich versuche, einen Autorisierungsheader hinzuzufügen, wobei HMAC-SHA256immer ein Fehler des fehlenden Autorisierungsheaders angezeigt wird
Steven Aguilar
2
Wenn Sie das <Base64EncodedCredentials>von @ timothy-kansaki erwähnte benötigen, können Sie den codierten Berechtigungsnachweis außerdem mit dem folgenden Befehl abrufen : cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Referenz finden Sie unter stackoverflow.com/questions/16918602/…
David Golembiowski
170

Inhaber-Token sehen folgendermaßen aus:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
Steve Tauber
quelle
7
Und wenn Sie
eine
Ich habe das Seltsamste, ich bekomme ein "Falsches Format des Autorisierungsheaders" und "HTTP-200". Der Server akzeptiert also meine Autorisierung, aber das Format ist falsch?
Groostav
65

(für diejenigen, die nach einer PHP-Curl- Antwort suchen )

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);
Rao
quelle
64

Das hat bei mir funktioniert:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
timj98
quelle
Was benutzt du für JWT?
Ciasto Piekarz
1
Meinst du nicht Authorization: bearer xxxxxxxxx?
13.
@jlh du meinstBearer
Daniel W.
Ich war mir fast sicher, dass die Groß- und Kleinschreibung nicht berücksichtigt wird, aber es scheint, dass ich falsch liege. Ja, ich meinte Bearer.
4.
20

Für HTTP Basic Auth:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

ersetzen _your_token_und die URL.

Devaroop
quelle
Woher würde das Autorisierungstoken bei Verwendung von oauth kommen? Ich versuche, Curl zum Herunterladen von Dateien von einer Site zu verwenden, auf der ich einen Benutzer und ein Kennwort verwende, aber es scheint aufgrund der Verwendung von oauth2 fehlzuschlagen.
Strg-Alt-Löschen
@toasteez Sie müssen den Oauth2-Flow durchlaufen, um einen Token zu erhalten. In der Regel handelt es sich um einen zweistufigen Prozess, der in der Dokumentation des Servers beschrieben werden sollte.
Devaroop
13
gute Antwort. Ein kleiner Helfer echo -ne "<your-user>:<your-pass>" | base64 --wrap 0generiert das grundlegende Authentifizierungstoken.
Mike D
3
@MikeD -H "Authorization: Basic <_your_token_>"macht den gleichen Effekt wie --user login:password. Sie können es überprüfen mitcurl -v
vladkras
1
@vladkras meine Antwort ist ein Helfer für diese Antwort. Nach meiner Erfahrung ist es besser zu verstehen, wie das Token erstellt wird, als sich beim Generieren auf Curl zu verlassen.
Mike D
14

Seien Sie vorsichtig, wenn Sie: curl -H "Authorization: token_str" http://www.example.com

token_strund Authorizationmuss durch Leerzeichen getrennt werden, sonst erhält die Server-Seite die HTTP_AUTHORIZATIONUmgebung nicht.

jianpx
quelle
2
Nicht wahr, wenn ein Leerzeichen erforderlich ist, ist Ihr HTTP-Server defekt. Außerdem benötigen Sie zwei Zeichenfolgen pro Typ und dann das Token.
Alexis Wilke
5

Wenn Sie das Token zum Zeitpunkt des Anrufs nicht haben, müssen Sie zwei Anrufe tätigen, einen, um das Token zu erhalten, und einen, um das Token aus der Antwort zu extrahieren

grep token | cut -d, -f1 | schneide -d "-f4

da es der Teil ist, der sich mit dem Extrahieren des Tokens aus der Antwort befasst.

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

Nach dem Extrahieren des Tokens können Sie das Token verwenden, um nachfolgende Aufrufe wie folgt durchzuführen.

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
Upul Doluweera
quelle