Marcin B.

Marcin B. Webdirector,
Wspólwłasciciel
Contip.net

Temat: REST i SecurityComponent - czyli jak prawidłowo...

Witam,
uruchamiam sobie w aplikacji API przy pomocy REST. To już działa, natomiast chciałbym teraz API odpowiednio zabezpieczyć przy pomocy SecurityComponent oczywiście (na początek wystarczy najprostsze zabezpieczenie login -> hasło).

Napisałem taki kawałek kodu i póki co sprawdza się ok:

public function beforeFilter() {
parent::beforeFilter();

if (!isset($this->params['admin']) && $this->RequestHandler->isXml()) {
$this->Security->loginOptions = array('type' => 'basic');
$this->Security->loginUsers = array('foo' => 'bar');
$this->Security->requireLogin();
$this->Security->validatePost = false;
}
}


Jednak mam kilka wątpliwości:

1. Czy sprawdzenie RequestHandler->isXml() jest wystarczające? Chodzi mi o to, czy jakieś inne zapytanie do aplikacji nie złapie się w ten warunek. A co jeśli będę chciał dorzucić JSON - przyjdzie mi modyfikować wszystkie warunki, stąd kolejne pytanie...

2. Czy można w jakiś sposób jednoznacznie rozpoznać, że zapytanie wykonywane jest z poziomu REST API, a nie jakieś inne? Choć w sumie nie wiem jakie inne zapytanie może być przez XML?

3. Może lepiej zdefiniować nowy routing prefix, tak jak mam dla admina, tak zrobić prefix o nazwie 'api' i takie tworzyć też akcje - api_index(), api_add(), api_edit(), itd...? Choć z drugiej strony w części przypadków będzie to spore powielenie kodu kontrolera, bo akcja index() dla zwykłego zapytania z przeglądarki może dawać dokładnie ten sam wynik.

4. Jeśli nie zrobię nowego prefixu, to będę miał np. w kontrolerze akcję index() i chciałbym, żeby ona była dostępna z poziomu API, ale nie chcę jej mieć z poziomu przeglądarki. Wiem, w drugim przypadku może nie być po prostu widoku i tak się nie wyświetli, ale jakieś marne to zabezpieczenie...

Trochę się tego zebrało, ale może ktoś da radę rozwiać moje wątpliwości :)
Marcin B.

Marcin B. Webdirector,
Wspólwłasciciel
Contip.net

Temat: REST i SecurityComponent - czyli jak prawidłowo...

Ok, wygląda na to, że sam sobie odpowiem na to pytanie. W tak prostym przypadku użycie podstawowej autentykacji HTTP z loginem i hasłem + sprawdzanie zapytania XML + jeszcze spoglądnięcie na ext w zapytaniu powinno dawać radę. W sumie zapytania REST to tak jak zapytania z tradycyjnych formularzy, więc nie ma się co za bardzo rozczulać.

Temat: REST i SecurityComponent - czyli jak prawidłowo...

Witam :)

Piszę aplikacje której głównej formą komunikacji ma być API w postaci REST'a i mam podobną zagwozdkę - zabezpieczenia. Byłbym wdzięczny za rozwinięcie tematu może odrobinę w kwestii przesyłania danych do logowania i ogólnie sposobu wysyłania zapytań.
Z tego co się zdążyłem naczytać to chyba najlepszy w tym celu będzie cURL - ale tu na przykład nie jestem pewien jak ustawić HTTP METHOD na np. DELETE albo bezpiecznie wysłać dane do logowania (np. jeśli wysyłamy coś GET'em).

EDIT:
Dobra, w nocy musiałem jakiś nieprzytomny być jak tego szukałem - jeśli chodzi bibliotekę do wysyłania zapytań REST'em to znalazłem tu coś ciekawego:

http://wezfurlong.org/blog/2006/nov/http-post-from-php...

Wygląda prosto i skutecznie :)

Ale podtrzymuje pytanie o zabezpieczenie przesyłanych danych do logowania...Łukasz Barcikowski edytował(a) ten post dnia 25.07.10 o godzinie 12:49
Marcin B.

Marcin B. Webdirector,
Wspólwłasciciel
Contip.net

Temat: REST i SecurityComponent - czyli jak prawidłowo...

Do takiego prostego zabezpieczenia zapytań HTTP (nie tylko w formułkach REST) SecurityComponent z taką podstawową autentykacją HTTP powinien wystarczyć.

Czytałem sobie na ten temat ostatnio w API Twittera (jak już się wzorować to na najlepszych) i tam są 2 metody autentykacji: http://apiwiki.twitter.com/Authentication oraz http://dev.twitter.com/pages/auth

Przy czym widać wycofują się z takiej na poziomie HTTP (ze względów bezpieczeństwa), na rzecz OAuth (http://oauth.net/) - myślę, że tym trzebaby się zainteresować. Ja póki co mam 1 usera do API, więc się nie skupiałem na tym, ale jeśli na coś ciekawego wpadniesz to daj znać :)Marcin B. edytował(a) ten post dnia 26.07.10 o godzinie 09:29

Następna dyskusja:

Jak przyspieszyc CakePHP?




Wyślij zaproszenie do