REST API logowanie i wylogowanie

0

Witam,

Napisałem sobie proste REST API. Na razie był oparty na kluczach dostępu. API głównie zwraca informacje o produktach i o kategoriach. Nic wiecej. Jednak teraz chce dodać system logowania i wylogowywania. Czyli piszę już aplikacje, która będzie oparta na tym API. Tutaj mam kila nieścisłości jeżeli chodzi o bezpieczeństwo. Rozumiem, że w czasie logowania wysyłam email i haslo do API i zwracam token jeżeli user znajduje się w bazie danych. Jak przechowywać takie token? W cookies? Oauth też przydziela tokeny na bardzo krótki okres czasu, więc domyślam się, że jakiś będzie potrzebny request do odświeżania tokena. Ale kiedy go odświeżyć? JS ma sam wysyłać co np 10min request refresh_token? I wylogowywanie, ale to chyba już jedno z łatwiejszych. Po prostu usuwam token i tyle.

0

Tworząc API nie powinieneś w ogóle tworzyć czegoś takiego jak logowanie i wylogowanie. API powinno być bezstanowe i zamiast logowania powinieneś mieć autentykacje

0

@axelbest Fakt, masz racje. Autentyfikacje na razie przeprowadzam, ale wylacznie dla jednego uzytkownika przez Oauth2. Tylko staram dobrze zrozumieć jak ma działać to z procesem "logowania". Rozumiem, że logowanie to właśnie autentyfikacja i przypisanie tokena. I z tym tokenem user może już wykonywać jakie chce requesty do API. Tylko jak przechowywać ten token, cookies? Czy to bedzie wystarczajaco bezpieczne? I jak z odświeżaniem tokena i tak samo jak z 'wylogowaniem'?

0

Nie ma czegos takiego jak wylogowanie z API. Jako wylogowanie można np potraktować brak kolejnych requestow. Jeśli dobrze zaimplementujesz oauth to będzie dobrze i bezpiecznie

0

To już kumam :D Ale chodzi mi o sam token :D Jak np go przechowywać. Ale to już sam dojdę do całej reszty. thx.

edit
O to chodzi, że ja mam single page application. I mam stronę z logowaniem. Więc jaki request to obsłuży i co ma zwrócić? :) Do tego wypadałoby dać jakiś link z wylogowaniem. No bo przecież to aplikacja. Więc tak samo. Jaki request, co ma robić i co ma zwrócić?

0

KOSZ.

0

API zwraca informacje o produktach i kategoriach nic poza tym. Same api jest backendem dla aplikacji w react.
Z tego co widze z dokumentacji oauth2 to do autorycaji potrzebuję sprawdzić username i passwrod i już mam ze tak powiem zalogowanego usera. A tokeny? Bede trzymał w cookie, chyba ze znajde cos lepszego:)
$server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();

0

Jeśli masz pobrać tylko informacje o produktach i kategoriach to czy potrzebna jest Ci autoryzacja? Jeśli tak to ok, wymieniaj sobie token w ciatseczku. Jeśli jest to informacja, która może być dostępna bez logowania to autentykacja nie jest potrzebna. Z kolei jeśli to ma być dostępne użytkownikom tylko po zalogowaniu to czy możesz powiedzieć jak oni maja z tego korzystać i w jakim celu (nie licząc faktu pobrania kategorii i informacji o produktach)

0

Tak, jest potrzebna autoryzacja. Tylko zalogowani użytkownicy mają dostęp do produktów i kategorii. To chodzi o wybraną grupe użytkowników. Ktorzy mogą przeglądać produkty, nie muszę ich kupować etc. To chodzi nawet o prezentacje dla klientów. Np Klient przychodzi do biura i gość wyciąga iPada, loguje się i przegląda z klientem produkty. Coś w ten deseń. Mam stronę www z produktami chemicznymi, która już ma dobre 6lat. I muszę do niej napisać apkę na desktopa i iPada. Użytkownikow przechowywyję w tabeli users, domyślam się, że będę musiał ich jakoś połączyć z oauth_users tabela? No ale to da rade :)

0

Jeśli masz pobrać tylko informacje o produktach i kategoriach to czy potrzebna jest Ci autoryzacja? Jeśli tak to ok, wymieniaj sobie token w ciatseczku. Jeśli jest to informacja, która może być dostępna bez logowania to autentykacja nie jest potrzebna. Z kolei jeśli to ma być dostępne użytkownikom tylko po zalogowaniu to czy możesz powiedzieć jak oni maja z tego korzystać i w jakim celu (nie licząc faktu pobrania kategorii i informacji o produktach)

0

Ok... Mały update.

Klient wyciąga iPada i loguje się - czyli każdy user w bazie ma możliwość korzystania z API. Jeśli tak to stosujesz oauth jako mechanizm autentykacji, dane odnośnie tokenow zapisujesz w cookie albo może local storage przeglądarki i tyle. Więcej filozofii tutaj chyba nie będzie

0

No i git :) Dzieki. Jutro zaimplementuje i gitara.

edit
A jak z użytkownikami? Trzeba będzie połączyć dwie tabele w jedną? Tak zastanawiam się bo jak na razie oauth_users przetrzymuje nie haszowane hasła. Czyli testhaslo trzyma jako testhaslo.

0

OK, udalo mi sie rozwiazac moj problem. W prawdzie problem byl w samym logowaniu. Ale to co mi pomoglo to linki ponizej:

http://www.bubblecode.net/en/2016/01/22/understanding-oauth2/
http://bshaffer.github.io/oauth2-server-php-docs/grant-types/user-credentials/

Tego co dokladnie szukalem to UserCredentials. Moim zdaniem, jak cala reszta jest bardzo ladnie opisana, to juz process logowania do API nie jest juz tak lopatologicznie wytlumaczony :)

Zostawiam dla potomnych :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1