2014-10-08 13 views
11

Sto cercando di implementare una semplice autorizzazione con thin su serveride e angularJS sul lato client. Per testare il REST APi sto usando un programma chiamato Rested per Mac che consente di inviare chiamate di riposo.richiesta thinframework-> intestazioni non leggere Autorizzazione

Desidero consegnare, una volta completata l'autorizzazione, in ogni punto di riposo chiamare un token jwt che può essere utilizzato all'interno di Slim per autorizzare richieste per determinati percorsi.

Ora consegno tramite Riposato la seguente intestazione e il corpo:

Accept: */* 
Accept-Encoding: gzip, deflate 
Content-Type: application/json 
Authorization: jwt-test 
Accept-Language: de-de 

{ 
    "login": "TestLogin", 
    "password": "TestPassword", 
    "uuid": "dsfglj45690dfgkl456" 
} 

E non solo stampare l'intera intestazione:

Slim\Http\Headers Object ([data:protected] => Array ([Host] => localhost:8888 
[Content-Type] => application/json [Content-Length] => 89 [Connection] 
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4 
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding] 
=> gzip, deflate)) 

Come si può vedere, non v'è alcuna autorizzazione all'interno di questo array .

Ho controllato anche questo con Firefox direttamente, gli stessi risultati. O può vedere la stringa di autorizzazione all'interno delle intestazioni delle richieste con firebug, ma non è nell'array di dumping su thinframework.

Qualcuno ha un indizio in cui si trova il mio problema?

Grazie in anticipo e Cordiali saluti

solick

+0

Come si aggiungono le intestazioni di accesso? Quello che hai condiviso sembra un corpo di richiesta, non le intestazioni. Inoltre, per inciso, è davvero una pessima idea inviare una password in testo semplice, sia che si tratti di intestazioni di richiesta o altro. –

+0

No, userò jwt più tardi, isßs solo per il test. Aggiungo solo l'autorizzazione all'intestazione, non di più. Come puoi vedere, se è l'oggetto intestazione Slim \ Http \ Headers – solick

+0

Per favore condividi un esempio di codice che mostra come stai impostando quelle intestazioni. Saremo in grado di darti una mano in questo modo. –

risposta

22

Problema

intestazione di base di autenticazione dovrebbe essere simile a questo.

Authorization: Basic cm9vdDp0MDBy 

La stringa dopo di base è costruito combinando username e password in una stringa come username:password. La stringa risultante viene quindi codificata utilizzando base64.

Si sta inviando un'intestazione al server web che non verrà analizzata da PHP. Non sono sicuro se questo è considerato un bug o una funzionalità.

Authorization: jwt-test 

Soluzione

Con la versione corrente di Slim se si aggiunge il seguente in .htaccess file.

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 

È possibile accedere a un'intestazione anche non standard con uno di questi.

var_dump($_SERVER["HTTP_AUTHORIZATION"]); 
var_dump(apache_request_headers()["Authorization"]); 
var_dump($app->request->headers("Authorization")); 

E ha pronunciato la seguente risultato:

string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 
string 'jwt-test' (length=8) 

Si potrebbe anche usare un altro nome di intestazione, come X-Authorization.

+0

Ciao Mika, grazie per le spiegazioni. Per quanto ho capito, Apache si aspetta un formato speciale per il valore di autorizzazione da accettare? Puoi condividere qualche link dove questo è definito? Ho provato nella mia applicazione angularJS con config.headers.Authorization = 'Bearer' + $ window.sessionStorage.tokenUUID; Ma ancora non riesco a vedere il campo Autorizzazione quando eseguo il dump dell'oggetto headers. – solick

+0

Aggiornamento della risposta con soluzione alternativa migliore. –

+0

Grazie Mika. Purtroppo mi sono dovuto fermare a causa di un altro progetto. Spero di poter tornare a questo progetto la prossima settimana e provare a implementare la tua soluzione. – solick

Problemi correlati