Come impostare l'intestazione dell'autorizzazione usando l'arricciatura


398

Come posso passare l'intestazione dell'autorizzazione usando cURL? (eseguibile in /usr/bin/curl).

Risposte:


395

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

Vedi parte 6. Autenticazione HTTP

Autenticazione HTTP

L'autenticazione HTTP è la capacità di dire al server il tuo nome utente e password in modo che possa verificare che ti è permesso fare la richiesta che stai facendo. L'autenticazione di base utilizzata in HTTP (che è il tipo di curl utilizzato per impostazione predefinita) è basata su testo semplice , il che significa che invia nome utente e password solo leggermente offuscati, ma ancora completamente leggibili da chiunque annusi sulla rete tra te e il server remoto.

Per dire a curl di usare un utente e una password per l'autenticazione:

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

Il sito potrebbe richiedere un diverso metodo di autenticazione (controlla le intestazioni restituite dal server), e quindi --ntlm, --digest, --negotiate o persino --anyauth potrebbero essere le opzioni adatte a te.

A volte l'accesso HTTP è disponibile solo tramite l'uso di un proxy HTTP. Questo sembra essere particolarmente comune in varie aziende. Un proxy HTTP può richiedere il proprio utente e password per consentire al client di accedere a Internet. Per specificare quelli con arricciatura, esegui qualcosa del tipo:

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

Se il tuo proxy richiede che l'autenticazione venga eseguita usando il metodo NTLM, usa --proxy-ntlm, se richiede Digest usa --proxy-digest.

Se si utilizza una di queste opzioni utente + password ma si esclude la parte password, curl richiederà la password in modo interattivo.

Si noti che quando si esegue un programma, i suoi parametri potrebbero essere visibili quando si elencano i processi in esecuzione del sistema. Pertanto, altri utenti potrebbero essere in grado di guardare le tue password se le passi come semplici opzioni da riga di comando. Ci sono modi per aggirare questo.

Vale la pena notare che mentre questo è il modo in cui funziona l'autenticazione HTTP, molti siti Web non useranno questo concetto quando forniscono accessi ecc. Vedi il capitolo Accesso Web più avanti per maggiori dettagli.


16
@Vixed Questa domanda non riguarda esplicitamente PHP. [Cosa c'è che non va nei risultati di Google]?
Oli,

La domanda riguarda l'autorizzazione e non l'autenticazione, quindi forse l'OP dovrebbe cambiare il titolo della domanda
inceppamento il

321

Basta aggiungere in modo da non dover fare clic:

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

o se stai provando a inviare l'autenticazione per OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
Molte API ora usano i token di autorizzazione dell'intestazione. L' -Hopzione è fantastica.
eliocs,

14
Se usi -u o --user, Curl codificherà le credenziali in Base64 e produrrà un'intestazione come questa:-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski il

Sto cercando di aggiungere un'intestazione di autorizzazione con HMAC-SHA256sempre un errore di intestazione di autorizzazione mancante
Steven Aguilar,

2
Inoltre, se avete bisogno di <Base64EncodedCredentials>come detto da @ Timothy-kansaki, è possibile ottenere la credenziale codificato utilizzando il comando: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Per riferimento, consultare stackoverflow.com/questions/16918602/…
David Golembiowski,

170

I token al portatore si presentano così:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
E se stai cercando di ottenere l'autorizzazione "Di base", scambia "Portatore" con "Di base"
un fratello il

Ho la cosa più strana, sto ottenendo un "formato errato dell'intestazione dell'autorizzazione" e "HTTP-200". Quindi il server accetta la mia autorizzazione, ma il formato è sbagliato?
Groostav,

65

(per coloro che cercano una risposta php-curl )

$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);

64

Questo ha funzionato per me:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

cosa stai usando per JWT?
Ciasto piekarz,

1
Non intendi Authorization: bearer xxxxxxxxx?
jlh

@jlh intendiBearer
Daniel W.

Ero quasi sicuro che non fa distinzione tra maiuscole e minuscole, ma sembra che mi sbagli. Sì, intendevo dire Bearer.
jlh

20

Per HTTP Basic Auth:

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

sostituire _your_token_e l'URL.


Quando si utilizza oauth da dove verrebbe il token di autorizzazione? Sto cercando di usare curl per scaricare file da un sito in cui utilizzo un utente e una password ma sembra non riuscire a causa di oauth2 in uso.
ctrl-alt-delete

@toasteez devi passare attraverso il flusso Oauth2 per ricevere un token. In genere si tratta di un processo in due fasi e deve essere dettagliato nella documentazione del server.
Devaroop,

13
buona risposta. un piccolo aiutante echo -ne "<your-user>:<your-pass>" | base64 --wrap 0genererà il token di autenticazione di base.
Mike D,

3
@MikeD -H "Authorization: Basic <_your_token_>"ha lo stesso effetto di --user login:password. Puoi verificarlo concurl -v
vladkras il

1
@vladkras la mia risposta è un aiuto per questa risposta. nella mia esperienza, è meglio capire come creare il token invece di fare affidamento sul ricciolo per generarlo.
Mike D,

14

Fai attenzione quando usi: curl -H "Authorization: token_str" http://www.example.com

token_stre Authorizationdeve essere separato da uno spazio bianco, altrimenti il ​​lato server non otterrà l' HTTP_AUTHORIZATIONambiente.


2
Non è vero, se è richiesto uno spazio bianco, il tuo server HTTP è rotto. Inoltre sono necessarie due stringhe per tipo e quindi il token.
Alexis Wilke,

5

Se non si dispone del token al momento della chiamata, è necessario effettuare due chiamate, una per ottenere il token e l'altra per estrarre il token dalla risposta, prestare attenzione a

token grep | cut -d, -f1 | taglia -d \ "-f4

poiché è la parte che si occupa dell'estrazione del token dalla risposta.

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()

Dopo aver estratto il token è possibile utilizzare il token per effettuare chiamate successive come segue.

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 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.