Come definire correttamente l'autenticazione HTTP di base usando cURL?


162

Sto imparando Apigility ( Apigility docu -> REST Service Tutorial ) e sto provando a inviare una richiesta POST con autenticazione di base tramite cURL:

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

YXBpdXNlcjphcGlwd2Q=è la stringa codificata base 64 con le mie credenziali apiuser:apipwd. Le credenziali vengono salvate in /data/htpasswd( apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

Sembra così:

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"

Dov'è l'errore qui? Come farlo funzionare?

Risposte:


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

Dalla pagina della documentazione:

-u, --user <utente: password>

Specificare il nome utente e la password da utilizzare per l'autenticazione del server. Sostituisce -n, --netrc e --netrc-opzionale.

Se si specifica semplicemente il nome utente, curl richiederà una password.

Il nome utente e le password sono suddivisi sui primi due punti, il che rende impossibile utilizzare i due punti nel nome utente con questa opzione. La password può, ancora.

Quando si utilizza Kerberos V5 con un server basato su Windows, è necessario includere il nome di dominio Windows nel nome utente, in modo che il server ottenga correttamente un ticket Kerberos. In caso contrario, l'handshake di autenticazione iniziale potrebbe non riuscire.

Quando si utilizza NTLM, il nome utente può essere specificato semplicemente come nome utente, senza il dominio, ad esempio se nella configurazione sono presenti un solo dominio e foresta.

Per specificare il nome di dominio, utilizzare i formati Nome accesso di livello inferiore o UPN (Nome principale utente). Ad esempio, ESEMPIO \ user e user@example.com rispettivamente.

Se si utilizza un file binario di curl abilitato per SSPI di Windows e si esegue l'autenticazione Kerberos V5, Negotiate, NTLM o Digest, è possibile indicare all'arricciatura di selezionare il nome utente e la password dal proprio ambiente specificando due punti con questa opzione: "-u:" .

Se questa opzione viene utilizzata più volte, verrà utilizzata l'ultima.

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

Si noti che non è necessario --basicflag in quanto è l'impostazione predefinita.


14
Se la tua password contiene alcuni caratteri speciali come? o @ quindi devi metterlo in singole zecche. curl -u 'username:? p @ ssword' http: //
Mirko Ebert

2
ma come appare questa richiesta effettiva? Mi sento come se molte persone testassero con l'arricciatura ma poi scrivessero il codice ect in qualunque lingua usassero. le informazioni --user vengono inviate come intestazione? In tal caso, come dovrebbe essere quell'intestazione
Verty00

@GautamKathrotiya in Postman c'è un'opzione Auth di base nella scheda Autorizzazione di una richiesta, inserirà questa intestazione di autorizzazione per te.
Kyle Calica-St

1
@ Verty00 puoi usare il flag -v con arricciatura per vedere il contenuto della richiesta.
Zach,

17

come intestazione

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