web-dev-qa-db-fra.com

Comment définir l'authentification HTTP de base à l'aide de cURL correctement?

J'apprends Apigility ( docu Apigility -> REST Didacticiel de service ) et tente d'envoyer une demande POST avec une authentification de base via cURL:

$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status

YXBpdXNlcjphcGlwd2Q= est la chaîne codée en base 64 avec mes informations d'identification apiuser:apipwd. Les informations d'identification sont enregistrées dans le /data/htpasswd (apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

Le ressemble à ceci:

HTTP/1.1 401 Unauthorized
Server: nginx/1.4.7
Date: Mon, 22 Sep 2014 07:48:47 GMT
Content-Type: application/problem+json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.5.12-1~dotdeb.1
WWW-Authenticate: Basic realm="api"

Où est l'erreur ici? Comment le faire fonctionner?

100
automatix
_curl -u username:password http://
curl -u username http://
_

Depuis la page de documentation:

- u, --user <utilisateur: mot de passe>

Spécifiez le nom d'utilisateur et le mot de passe à utiliser pour l'authentification du serveur. Remplace les options -n, --netrc et --netrc-optional.

Si vous spécifiez simplement le nom d'utilisateur, curl demandera un mot de passe.

Le nom d'utilisateur et les mots de passe sont séparés sur le premier deux-points, ce qui rend impossible l'utilisation de deux-points dans le nom d'utilisateur avec cette option. Le mot de passe peut, encore.

Lorsque vous utilisez Kerberos V5 avec un serveur Windows, vous devez inclure le nom de domaine Windows dans le nom d'utilisateur, afin que le serveur puisse obtenir avec succès un ticket Kerberos. Si vous ne le faites pas, la négociation initiale de l'authentification peut échouer.

Lorsque vous utilisez NTLM, le nom d'utilisateur peut être spécifié simplement comme nom d'utilisateur, sans le domaine, s'il n'y a qu'un seul domaine et une seule forêt dans votre configuration, par exemple.

Pour spécifier le nom de domaine, utilisez les formats Nom de connexion de niveau inférieur ou Nom UPN (Nom de l'utilisateur principal). Par exemple, EXEMPLE\utilisateur et [email protected], respectivement.

Si vous utilisez un binaire curl activé pour Windows SSPI et effectuez une authentification Kerberos V5, Negotiate, NTLM ou Digest, vous pouvez indiquer à curl de sélectionner le nom d'utilisateur et le mot de passe dans votre environnement en spécifiant un simple point avec cette option: "-u:" .

Si cette option est utilisée plusieurs fois, la dernière sera utilisée.

http://curl.haxx.se/docs/manpage.html#-

Notez que vous n'avez pas besoin de l'indicateur --basic car il s'agit de l'indicateur par défaut.

192
Gajus

comme en-tête

AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0)

curl \
  --header "Content-Type: application/json" \
  --header "Authorization: Basic $AUTH" \
  --request POST \
  --data  '{"key1":"value1", "key2":"value2"}' \
  https://example.com/
9
srghma

Lorsque vous utilisez OAuth ou d'autres services d'authentification, vous pouvez souvent également envoyer votre jeton d'accès dans une chaîne de requête plutôt que dans un en-tête d'autorisation. Par exemple,

GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD
7
Wilt