System tokenów - Symfony API

0

Cześć
Robię API w Symfony oraz aplikacje frontendową (chyba Vue, ale jeszcze nie jestem pewien) i mobilną. Zastanawiam się jak najlepiej zrobić system logowania. Mogę użyć JWT ale w sumie nie za bardzo go potrzebuję, niczego na ten moment w tokenie nie będę umieszczał. Mogę użyć Oauth, ale to wydaje mi się takie za duże do mojego API. Mogę zrobić zwykły token trzymany w bazie.

Nie za bardzo wiem czego użyć, aby było w pełni bezpiecznie i w miarę łatwo. Potrzebowałbym opcji zakończenia sesji dowolnej osoby w dowolnym momencie. Nie chciałbym też, aby sesja sama wygasła jeśli użytkownik zaznaczy opcję. I teraz jeśli użyje jwt to nie mam prostej opcji zakończenia takiej sesji. Generalnie mając tokeny nie ma opcji zapamiętaj mnie. Powinienem dać dodatkowy token odświeżania? Czy mogę zrobić przy tokenie datę ważności i będzie to jakiś czas, a z opcją nie wylogowania nigdy ustawić ważny na zawsze? Nie brzmi to bezpieczne, ale średnio mam pomysł jak inaczej

Poradźcie jak to by mogło wyglądać, aby było dobrze, ale też nie za skomplikowanie.

1

Zerknij sobie na AWS Cognito - https://aws.amazon.com/cognito/

1
[marekm1 napisał(a)]:

Mogę użyć Oauth, ale to wydaje mi się takie za duże do mojego API. Mogę zrobić zwykły token trzymany w bazie.

Nie zgodzę się. Zerknij sobie co oferują FOS, w zależności od potrzeb 1-3 bundle i masz gotowy system tokenów- strukturę db, endpointy, itd.

Natomiast własna implementacja, choćby była najprostsza z możliwych, zajmie więcej czasu.
Oprócz tego również polecam Aws Cognito. Implementacja może zajmie więcej czasu niż bundle od FOSów aczkolwiek będziesz miał dość nowoczesny i bezpieczny system logowania.

0
alkyms napisał(a):

Nie zgodzę się. Zerknij sobie co oferują FOS, w zależności od potrzeb 1-3 bundle i masz gotowy system tokenów- strukturę db, endpointy, itd.

Hmm, a mógłbym prosić o wyjaśnienie jednej rzeczy (mam podobną rozkminę jak OP, ale jestem początkujący i nie do końca wszystko rozumiem)? Mianowicie załóżmy, że chcę zastować OAuth, korzystam zatem z FOSOAuthServerBundle i stawiam sobie takie API.

No tyle że wg mojego obecnego rozumienia, OAuth stosuje się głównie do zalogowania w jednym serwisie danymi z drugiego (bez przekazywania hasła / innych wrażliwych danych) - np. logując na Endomondo przy użyciu konta Google. Google ma serwer OAuth, Endomondo klient. Ktoś inny może utworzyć sobie aplikację, w której też będzie możliwość logowania przez Google.

A tutaj sytuacja wygląda inaczej - mamy API, z którego korzystać będą tylko dwie aplikacje (webowa i mobilna), których my sami będziemy właścicielami. Po co korzystać w tym przypadku z OAuth?

0

Masz sporo racji.
Moja odpowiedź uwzględnia potrzebę OPa i odniesienie do Oauth jako do rozwiązania zbyt dużego. Autor potrzebuje tokenu, może sobie zrobić jakąś prostą akcję która to obsługuje, ale to zajmie tyle samo czasu co implementacji bundla od FOSów a rozwiązanie będzie niewspółmiernie słabsze, mniej bezpieczne, gorzej (albo wcale) przetestowane.

0

Dzięki za odpowiedzi. @alkyms co masz na myśli przez rozwiązanie od FOS, OAuth? Nawiązując do wypowiedzi @bspz - w moim przypadku ma sens jego użycie?

A Cognito to jednak uzależnienie się od zewnętrznej usługi, a tego akurat w tym miejscu chciałbym uniknąć. Jeśli nie to i nie OAuth to co? JWT? Rozwiązanie z własnym tokenem? Jeżeli własnym to na jakich zasadach z jego zapisywaniem/odświeżaniem?

0

Wydaje mi się, że (szczególnie z vue) lepszy jest laravel, plus ma system logowania z tokenem w standardzie bez zbędnego grzebania i sporo paczek.

0
marekm1 napisał(a):

Rozwiązanie z własnym tokenem? Jeżeli własnym to na jakich zasadach z jego zapisywaniem/odświeżaniem?

Moje rekomendacje są poniekąd odpowiedzią na to pytanie. Przemyślenie ogólnych zasad, generowanie, odświeżanie itd. to są tematy które trzeba zaplanować i mieć trochę wiedzy i doświadczenia żeby to zrobić dobrze i bezpiecznie. Bundle od FOSów dają CI to wszystko w formie sprawdzonego przez wiele lat, dobrze przetestowanego oprogramowania open source.

@czysteskarpety: Możesz doprecyzować dlaczego Laravel szczególnie z Vue będzie lepszy? Dokładnie chodzi mi te zalety łączenia Vue z Laravelem.

0

@alkyms rozumiem, przez bundle od FOS masz na myśli jakie dokładnie? Tylko ten OAuth server? https://github.com/FriendsOfSymfony/FOSOAuthServerBundle - trochę on stary, dawno nie był aktualizowany, nawet wsparcia do Sf5 nie ma jeszcze

0
marekm1 napisał(a):

@alkyms rozumiem, przez bundle od FOS masz na myśli jakie dokładnie? Tylko ten OAuth server? https://github.com/FriendsOfSymfony/FOSOAuthServerBundle - trochę on stary, dawno nie był aktualizowany, nawet wsparcia do Sf5 nie ma jeszcze

To, że jakaś libka dawno nie było aktualizowana, nie musi wcale oznaczać, że jest przestarzała. Może po prostu spełnia swoje zadanie i jest stabilna, że nie ma sensu już nic zmieniać, skoro nadal dobrze działa?

SF5 dopiero 2tyg temu wyszło, więc to normalne, że libki jeszcze tego nie obsługują.

0
marekm1 napisał(a):

[...] nawet wsparcia do Sf5 nie ma jeszcze

Słowo nawet jest tu nadużyciem. Obecna wersja wyszła niespełna miesiąc temu i jak każda *.0 będzie miała krótki żywot. Nie wydaje mi się aby rozsądnym była próba wdrożenia aplikacji produkcyjnie na Symfony 5.0. Ja z tego bundla z powodzeniem korzystam na Sf4.3, w najbliższym czasie robimy upgrade do 4.4. Poza tym za tego co widzę to rozmowy na temat wsparcia dla piątki już trwają.

Abstrahując od tematu.
Za: https://medium.com/@ger86/symfony-5-whats-new-in-this-new-version-3e2385c2d0b7

Symfony 5 is practically the same as Symfony 4.4 unless it does not have the code that has been marked as deprecated in version 4.4. In this way, if you develop a project from scratch you can start it with Symfony 5 but for existing projects it is recommended to upgrade to version 4.4, remove all the deprecated code and then jump to version 5 when necessary.

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