2014-09-22 12 views
63

Sto imparando Apigility (Apigility docu -> REST Service Tutorial) e cercando di inviare una richiesta POST con l'autenticazione di base tramite cURL:Come definire l'autenticazione HTTP di base usando cURL correttamente?

$ 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 nello /data/htpasswd (apiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/).

Il assomiglia a questo:

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" 

Dove è l'errore qui? Come farlo funzionare?

+0

Ho aggiornato la mia risposta. Penso che dovresti passare il token di accesso in una stringa di query. – Wilt

risposta

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

Dalla pagina di documentazione:

-u, --user < utente: Password >

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

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

Il nome utente e le password sono divisi sui primi due punti, che con 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 si dovrebbe includere il nome di dominio di Windows il nome utente, in modo che il server con successo ottenere un ticket Kerberos. In caso contrario, l'iniziale handshake di autenticazione potrebbe non riuscire.

Quando si utilizza NTLM, il nome utente può essere specificato semplicemente come nome utente , senza il dominio, se v'è un singolo dominio e la foresta in vostro setup per esempio.

Per specificare il nome del dominio, utilizzare i formati Nome di accesso a livello inferiore o UPN (Nome principale utente). Ad esempio, ESEMPIO \ utente e [email protected] rispettivamente.

Se si utilizza un binario ricciolo di Windows SSPI-enabled e di eseguire Kerberos V5, Negotiate, NTLM o digest di autenticazione, allora si può dire curl per selezionare il nome utente e la password dal proprio ambiente specificando un singolo colon con questo 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 --basic bandiera in quanto è il valore predefinito.

+4

Se la password contiene caratteri speciali come? o @ allora devi metterlo in tick singoli. curl -u 'nome utente:? P @ ssword' http: // – tfb785

+0

ma che aspetto ha questa richiesta effettiva? Mi sento come se un sacco di persone test con curl ma poi scrivere codice ect in qualsiasi lingua che usano. le informazioni su --user vengono inviate come intestazione? Se sì, come dovrebbe essere l'intestazione? – Verty00

6

Quando si utilizzano OAuth o altri servizi di autenticazione spesso è possibile anche inviare il token di accesso in una stringa di query invece che in un'intestazione di autorizzazione, in modo da qualcosa come:

GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD 
Problemi correlati