2014-10-08 15 views
11

Próbuję zaimplementować prostą autoryzację ze slim na serveride i angularJS po stronie klienta. Do testowania REST APi używam programu o nazwie Rested for Mac, który pozwala na wysyłanie reszta połączeń.żądanie slimframework-> nagłówki nie czytaj Autoryzacja

Chcę dostarczyć, po zakończeniu autoryzacji, przy każdym odpoczynku wywołać token jwt, który może być używany w wąskim zakresie do autoryzacji wniosków o określone ścieżki.

Teraz podam poprzez wypoczęty następujący nagłówek i ciało:

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

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

I nie tylko wydrukowanie całego nagłówka:

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)) 

Jak widać, nie ma zezwolenia w tej tablicy .

Sprawdziłem to również z firefox bezpośrednio, te same wyniki. O można zobaczyć ciąg Authorization w nagłówkach żądań z firebug, ale nie ma go w pustej tablicy w slimframework.

Czy ktoś ma wskazówkę, gdzie leży mój problem?

góry dzięki i poważaniem

solick

+0

Jak dodajesz nagłówki logowania? Udostępnione elementy wyglądają jak treść żądania, a nie nagłówki. Poza tym, jest to naprawdę zły pomysł, aby kiedykolwiek wysłać hasło w postaci zwykłego tekstu, czy to w nagłówkach żądań, czy w inny sposób. –

+0

Nie, użyję jwt później, tylko do testowania. Dodaję tylko autoryzację do nagłówka, a nie więcej. Jak widać, jeśli jest to obiekt nagłówka Slim \ Http \ Headers – solick

+0

Proszę udostępnić przykład kodu pokazujący sposób ustawiania tych nagłówków. Będziemy w stanie dać ci taką możliwość. –

Odpowiedz

22

Problem

Podstawowe nagłówka uwierzytelniania powinien wyglądać mniej więcej tak.

Authorization: Basic cm9vdDp0MDBy 

Ciąg po Podstawowy jest zbudowany przez połączenie nazwy użytkownika i hasła do łańcucha jak username:password. Wynikowy ciąg jest następnie kodowany przy użyciu base64.

Wysyłasz nagłówek do serwera WWW, którego PHP nie przeanalizuje. Nie jestem pewien, czy jest to błąd lub funkcja.

Authorization: jwt-test 

Rozwiązanie

Z obecnej wersji Slim, jeśli dodać następujący plik .htaccess.

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

Następnie można uzyskać dostęp do nawet niestandardowego nagłówka z dowolnym z nich.

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

To daje następujący wynik:

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

Można również użyć innej nazwy nagłówka, takie jak X-Authorization.

+0

Cześć Mika, dzięki za wyjaśnienia. O ile cię rozumiem, Apache spodziewa się specjalnego formatu, aby wartość autoryzacji została zaakceptowana? Czy możesz udostępnić link tam, gdzie jest on zdefiniowany? Próbowałem w mojej aplikacji angularJS z config.headers.Authorization = 'Bearer' + $ window.sessionStorage.tokenUUID; Ale nadal nie widzę pola autoryzacji podczas zrzutu obiektu nagłówków. – solick

+0

Zaktualizowano odpowiedź, stosując lepsze obejście. –

+0

Dzięki Mika. Niestety musiałem się zatrzymać z powodu innego projektu. Mam nadzieję, że będę mógł wrócić do tego projektu w przyszłym tygodniu i spróbować wdrożyć twoje rozwiązanie. – solick