2013-05-20 34 views
10

Piszę prostą usługę RESTful, używając serwera Reur Phil Sturgeon. Chcę chronić moje metody przy użyciu klucza API dostarczonego z tą biblioteką.Kod autoryzacji kodu autoryzacji usługi REST

Niestety, nie jest to dobrze udokumentowane i jestem trochę zagubiony.

Chcę uwierzytelnić użytkowników (e-mail/hasło), a następnie wygenerować klucz autoryzacji, który będzie wysyłany na każde inne żądanie. Ale wydaje mi się, że już potrzebuję klucza autoryzacji do wygenerowania ... Stwórz fałszywy klucz nie wydaje się bardzo bezpieczny. Przepraszam, jeśli to głupie pytanie, ale jaka powinna być najlepsza praktyka?

Odpowiedz

11

Jeśli znasz inne interfejsy API, zauważysz wspólny wzorzec. Polecam metodę uwierzytelniania, w której użytkownik przekazuje swój adres e-mail i hasło, które zwróci wygenerowany unikalny klucz autoryzacji. Klucz auth będzie jak identyfikator sesji, pomyśl jak działają pliki cookie. Następnie wszystkie inne metody API powinny sprawdzić $ this-> post ('auth') i porównać to z sesją obsługi sesji (tj. Bazą danych lub sesjami), zanim przetworzysz każde żądanie.

Wydaje się, że dużo kodu, huh? Nie.

Wszystkie twoje modele powinny mieć przeciążony Konstruktor:

class MyAPIController extends Rest_controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     if(!authCheck($this->post('auth'))){ 
      returnFailedResponse(); 
      exit(); 
     } 
} 

następnie napisać ci API normalnie, jak w przykładach na stronie Phila jesiotr jest. http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

Utwórz model, który ma authCheck, aby przetestować poprawność klucza auth, i wykonaj metodę returnFailedResponse, aby zwrócić 401 nieautoryzowane.

W innym kontrolerze, nazwijmy go "Auth", użyj powyższego contructor.

Teraz każde wywołanie api powinno ustawić nagłówek dla Auth. Dawny. "Auth: 12m34k23b".

+0

Dziękujemy! Skończyłem robić coś podobnego do tego. Zaznaczę twoją odpowiedź jako zaakceptowaną. – jose

+0

im obecnie jest w stanie uzyskać dostęp do sesji. próbowałem zalogować się już teraz, ale udało się stworzyć sesję, ale kolejne żądanie nie zostało zalogowane. proszę, nie mogę zrozumieć sposobu uwierzytelnienia :( –