Comment définir l'en-tête d'autorisation à l'aide de curl

398

Comment passer l'en-tête d'autorisation à l'aide de cURL? (exécutable en /usr/bin/curl).

Vidya
la source

Réponses:

395

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

Voir partie 6. Authentification HTTP

Authentification HTTP

L'authentification HTTP est la possibilité de dire au serveur votre nom d'utilisateur et votre mot de passe afin qu'il puisse vérifier que vous êtes autorisé à faire la demande que vous faites. L'authentification de base utilisée dans HTTP (qui est le type utilisé par défaut par curl) est basée sur du texte brut , ce qui signifie qu'elle envoie le nom d'utilisateur et le mot de passe seulement légèrement obscurcis, mais toujours entièrement lisibles par quiconque renifle sur le réseau entre vous et le serveur distant.

Pour dire à curl d'utiliser un utilisateur et un mot de passe pour l'authentification:

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

Le site peut nécessiter une méthode d'authentification différente (vérifiez les en-têtes renvoyés par le serveur), puis --ntlm, --digest, --negotiate ou même --anyauth peuvent être des options qui vous conviennent.

Parfois, votre accès HTTP est uniquement disponible via l'utilisation d'un proxy HTTP. Cela semble être particulièrement courant dans diverses entreprises. Un proxy HTTP peut nécessiter son propre utilisateur et mot de passe pour permettre au client d'accéder à Internet. Pour spécifier ceux avec curl, exécutez quelque chose comme:

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

Si votre proxy requiert que l'authentification soit effectuée à l'aide de la méthode NTLM, utilisez --proxy-ntlm, s'il nécessite Digest, utilisez --proxy-digest.

Si vous utilisez l'une de ces options utilisateur + mot de passe mais en omettant la partie mot de passe, curl vous demandera le mot de passe de manière interactive.

Notez que lorsqu'un programme est exécuté, ses paramètres peuvent être visibles lors de la liste des processus en cours d'exécution du système. Ainsi, d'autres utilisateurs peuvent être en mesure de surveiller vos mots de passe si vous les transmettez en tant qu'options de ligne de commande simples. Il existe des moyens de contourner cela.

Il convient de noter que bien que cela fonctionne comme l'authentification HTTP, de nombreux sites Web n'utiliseront pas ce concept lorsqu'ils fournissent des connexions, etc. Voir le chapitre Connexion Web plus loin pour plus de détails à ce sujet.

Oli
la source
16
@Vixed Cette question ne concerne pas explicitement PHP. [Quel est le problème avec les résultats de Google]?
Oli
La question concerne l'autorisation et non l'authentification, alors peut-être que l'OP devrait changer le titre de la question
jam
321

Ajoutez simplement pour ne pas avoir à cliquer:

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

ou si vous essayez de faire une authentification d'envoi pour OAuth 2:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com
Tony
la source
15
De nombreuses API utilisent désormais des jetons d'autorisation d'en-tête. L' -Hoption est excellente.
eliocs
14
Si vous utilisez -u ou --user, Curl encodera les informations d'identification en Base64 et produira un en-tête comme celui-ci:-H Authorization: Basic <Base64EncodedCredentials>
Timothy Kanski
J'essaie d'ajouter un en-tête d'autorisation avec HMAC-SHA256toujours une erreur d'en-tête d'autorisation manquant
Steven Aguilar
2
De plus, si vous avez besoin , <Base64EncodedCredentials>comme mentionné par @ fléole-Kansaki, vous pouvez obtenir les informations d' identification encodée en utilisant la commande: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com. Pour référence, voir stackoverflow.com/questions/16918602/…
David Golembiowski
170

Les jetons au porteur ressemblent à ceci:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com
Steve Tauber
la source
7
Et si vous cherchez à faire une autorisation 'Basic', échangez simplement 'Bearer' contre 'Basic'
un darren
J'ai la chose la plus étrange, j'obtiens un "Mauvais format d'en-tête d'autorisation" et "HTTP-200". Le serveur accepte donc mon autorisation, mais le format est incorrect?
Groostav
65

(pour ceux qui recherchent une réponse 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);
Rao
la source
64

Cela a fonctionné pour moi:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/
timj98
la source
qu'utilisez-vous pour JWT?
Ciasto piekarz
1
Tu ne veux pas dire Authorization: bearer xxxxxxxxx?
jlh
@jlh tu veux direBearer
Daniel W.
J'étais presque sûr qu'il est insensible à la casse, mais il semble que je me trompe. Oui, je voulais dire Bearer.
JLH
20

Pour l'authentification HTTP de base:

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

remplacer _your_token_et l'URL.

Devaroop
la source
Lorsque vous utilisez oauth, d'où proviendrait le jeton d'autorisation? J'essaie d'utiliser curl pour télécharger des fichiers à partir d'un site où j'utilise un utilisateur et un mot de passe, mais cela semble échouer en raison de l'utilisation de oauth2.
ctrl-alt-delete
@toasteez vous devez passer par le flux Oauth2 pour recevoir un jeton. Il s'agit généralement d'un processus en deux étapes et doit être détaillé dans la documentation du serveur.
Devaroop
13
bonne réponse. un petit assistant echo -ne "<your-user>:<your-pass>" | base64 --wrap 0générera le jeton d'authentification de base.
Mike D
3
@MikeD -H "Authorization: Basic <_your_token_>"fait le même effet que --user login:password. Vous pouvez le vérifier aveccurl -v
vladkras
1
@vladkras ma réponse est une aide pour cette réponse. d'après mon expérience, il est préférable de comprendre comment créer le jeton au lieu de s'appuyer sur curl pour le générer.
Mike D
14

Veillez à ce que lorsque vous utilisez: curl -H "Authorization: token_str" http://www.example.com

token_stret Authorizationdoit être séparé par un espace blanc, sinon le côté serveur n'obtiendra pas l' HTTP_AUTHORIZATIONenvironnement.

jianpx
la source
2
Ce n'est pas vrai, si un espace blanc est requis, votre serveur HTTP est cassé. Vous avez également besoin de deux chaînes par type, puis du jeton.
Alexis Wilke
5

Si vous ne disposez pas du jeton au moment de l'appel, vous devrez effectuer deux appels, l'un pour obtenir le jeton et l'autre pour extraire le jeton de la réponse, faites attention à

jeton grep | coupe -d, -f1 | couper -d \ "-f4

car c'est la partie qui traite de l'extraction du jeton de la réponse.

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

Après avoir extrait le jeton, vous pouvez utiliser le jeton pour effectuer des appels ultérieurs comme suit.

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
la source