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

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.


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

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

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

64

Cela a fonctionné pour moi:

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

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.


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.


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 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.