Wie definiere ich die grundlegende HTTP-Authentifizierung mit cURL richtig?

160

Ich lerne Apigility ( Apigility-Dokument -> REST-Service-Tutorial ) und versuche, eine POST-Anfrage mit Basisauthentifizierung über cURL zu senden:

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

YXBpdXNlcjphcGlwd2Q=ist die Base 64-codierte Zeichenfolge mit meinen Anmeldeinformationen apiuser:apipwd. Die Anmeldeinformationen werden in /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/) gespeichert .

Das sieht so aus:

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"

Wo ist der Fehler hier? Wie bekomme ich es zum Laufen?

automatix
quelle

Antworten:

291
curl -u username:password http://
curl -u username http://

Von der Dokumentationsseite:

-u, --user <Benutzer: Passwort>

Geben Sie den Benutzernamen und das Kennwort an, die für die Serverauthentifizierung verwendet werden sollen. Überschreibt -n, --netrc und --netrc-optional.

Wenn Sie einfach den Benutzernamen angeben, fordert curl zur Eingabe eines Kennworts auf.

Der Benutzername und die Kennwörter werden im ersten Doppelpunkt aufgeteilt, sodass mit dieser Option kein Doppelpunkt im Benutzernamen verwendet werden kann. Das Passwort kann noch.

Wenn Sie Kerberos V5 mit einem Windows-basierten Server verwenden, sollten Sie den Windows-Domänennamen in den Benutzernamen aufnehmen, damit der Server erfolgreich ein Kerberos-Ticket erhält. Wenn Sie dies nicht tun, schlägt der anfängliche Authentifizierungs-Handshake möglicherweise fehl.

Bei Verwendung von NTLM kann der Benutzername einfach als Benutzername ohne Domäne angegeben werden, wenn sich beispielsweise in Ihrem Setup eine einzelne Domäne und Gesamtstruktur befindet.

Verwenden Sie zum Angeben des Domänennamens entweder die Formate Down-Level-Anmeldename oder UPN (User Principal Name). Zum Beispiel BEISPIEL \ user bzw. [email protected].

Wenn Sie eine Windows SSPI-fähige Curl-Binärdatei verwenden und eine Kerberos V5-, Negotiate-, NTLM- oder Digest-Authentifizierung durchführen, können Sie curl anweisen, den Benutzernamen und das Kennwort aus Ihrer Umgebung auszuwählen, indem Sie einen einzelnen Doppelpunkt mit der folgenden Option angeben: "-u:" .

Wenn diese Option mehrmals verwendet wird, wird die letzte verwendet.

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

Beachten Sie, dass Sie kein --basicFlag benötigen, da dies die Standardeinstellung ist.

Gajus
quelle
14
Wenn Ihr Passwort einige Sonderzeichen enthält wie? oder @ dann musst du es in einzelne Ticks setzen. curl -u 'Benutzername :? p @ ssword' http: //
Mirko Ebert
2
aber wie sieht diese eigentliche Anfrage aus? Ich habe das Gefühl, dass viele Leute mit Curl testen, dann aber Code ect in der Sprache schreiben, die sie verwenden. Werden die --user-Informationen als Header gesendet? Wenn ja, wie sollte dieser Header aussehen
Verty00
@GautamKathrotiya in Postman gibt es eine Basic Auth-Option auf der Registerkarte Authorization einer Anfrage, die diesen Authorization-Header für Sie einfügt.
Kyle Calica-St
1
@ Verty00 Sie können das Flag -v mit Curl verwenden, um den Inhalt der Anforderung anzuzeigen.
Zach
17

als Header

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/
Srghma
quelle