• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Logowanie w SPA z wykorzystaniem Laravel Passport

VPS Starter Arubacloud
0 głosów
518 wizyt
pytanie zadane 18 września 2019 w PHP przez Maikel11 Początkujący (470 p.)
Cześć, szukam wskazówek i rad na temat logowania usera do API przy pomocy tokenu. Logowanie mam już zrobione i obsłużone po stronie serwera i frontu ale nie do końca mam pewność czy robię to dobrze. Teraz po zalogowaniu i otrzymaniu tokenu z API w Vue zapisuje token do store i localstorage. Gdy user odświeży stronę sprawdzam czy istnieje token w localstorage i jeśli tak to sprawdzam czy jest on poprawny i zapisuję w store. Jeśli jednak tokenu nie ma w localstorage, przekierowuję usera do strony logowania. I tutaj moje pytanie, aktualnie działa to tak, że userowi w takim przypadku zostaje przypisany nowy token i w bazie dany user ma teraz dwa tokeny dostępu, oba prawidłowe. Czy powinno to działać w taki sposób? Szukałem w docs Passporta ale nie znalazłem informacji na ten temat (chyba, że ją ominąłem),  znalazłem tylko metodę tokens() dostępną z poziomu modelu User, która zwraca wszystkie tokeny. Czy powinienem skonstruować metodę do logowania w taki sposób aby w przypadku, gdy user posiada już jeden aktywny token nie przydzielał się mu kolejny ? Jak działają takie systemy logowania? Czy tokenów może być niezliczona ilość? I jak wygląda logowanie na wielu urządzeniach w tym samym czasie?

1 odpowiedź

0 głosów
odpowiedź 18 września 2019 przez Ehlert Ekspert (212,630 p.)
Dla takiej aplikacji dobrze byłoby gdybyś zrobił api stateless. To znaczy back-end nie trzyma żadnych informacji o tym kto jest zalogowany i czy jego sesja jest aktualna. Wszystko to można zawrzeć w tokenie JWT.
komentarz 19 września 2019 przez Maikel11 Początkujący (470 p.)
Z tego co mi się wydaje tak to działa w Laravel Passport. Mi jednak chodzi o kwestie tworzenia kilku tokenów dla tego samego usera ponieważ w sytuacji, gdy w SPA nie mam tokenu w localsotrage użytkownik loguje się ponownie i tworzy sobie nowy token. Oba tokeny są poprawne i użytkownik znając je może nimi żonglować. I czy to nie jest problemem?
1
komentarz 19 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
edycja 19 września 2019 przez JakSky
Jak chcesz aby użytkownik mógł mieć możliwość zalogowania się na kilku urządzeniach czy przeglądarkach jednocześnie to może tak być. Na każdym urządzeniu inny token i tyle. Co do JWT to unikałbym szerokim łukiem, jeżeli zależy na spójności danych itp. Jest sporo negatywnych opinii o JWT, warto poczytać.
komentarz 19 września 2019 przez Ehlert Ekspert (212,630 p.)
Co ma jwt do spójności danych. Możesz wyjaśnić?
komentarz 19 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
edycja 19 września 2019 przez JakSky
Założeniem JWT jest przechowywanie danych w zaszyfrowanej formie po stronie klienta. W tym np. id usera. Gdy wyślemy taki plik do serwera to następuje odczytanie tych danych z JWT a nie z bazy danych(inaczej JWT nie miałby sensu bo wystarczyłby tylko sam zwykły token np. ciąg liczb). A co gdy użytkownik ma już wystawiony token JWT a my w tym czasie zmienimy id użytkownika w bazie danych?

Wtedy może dojść nawet do tego, że przy następnym żądaniu użytkownik będzie się identyfikował id innego użytkownika.

Edit

Dodam jeszcze, że dochodzi trudność zbanowania takiego użytkownika bo jak unieważnić token JWT nie mając nawet świadomości czy taki istnieje.
komentarz 19 września 2019 przez Ehlert Ekspert (212,630 p.)
  1. W jwt dane nie są szyfrowane. Są w base64 oraz podpisane, tak aby user nie mógł zmienić ich treści.
  2. W jwt nie zapisuje się całych danych a np id usera. Nie widzę sensu trzymania tam username który może się zmienić i narazić apkę na niespójność.
  3. Jak od 5 lat coś tam sobie klepie w klawiaturę to jeszcze nie widziałem że id usera się zmieniło. 
  4. Nie ma trudności banowania. Jwt są krótko ważne i wystawiasz refresh tokeny. Banujesz usera to blolujesz refresh tokeny i nie wystawiasz nowych.
komentarz 19 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
edycja 19 września 2019 przez JakSky

1. Czyli trzeba sprawdzić podpis aby mieć pewność, czyli zaszyfrować dane aby porównać podpis....

2. Zapisuje się id ale też np. role użytkowników- przynajmniej często te dane widzę w przykładach i dyskusjach.

3. Ale jest taka możliwość, prawda?

4. Krótko, czyli ile? Dla mnie 5 minut to sporo czasu w którym ktoś może jeszcze np. masę spamu rozesłać. Poza tym taki system odnawiania ważności przeczy trochę z idą bezstanowości. Aby przedłużyć ważność to trzeba robić zapytanie do bazy dany.....

Tu jest trochę o JWT, można zerknąć....

https://kubrynski.blog/bezpieczenstwo-systemow-rozproszonych/

Jedynie gdzie widzę JWT to w architekturze mikroserwisowej. 

komentarz 19 września 2019 przez Ehlert Ekspert (212,630 p.)

To zrób steteful JWT i trzymaj tam tylko id usera. Możesz też zwracać nowy token kiedy dane ze starego zostaną zmienione nie widzę problemu. 

Co do zmiany id. Nie. Jeżeli jakiś user po rejestracji dostaje id x to id x powinno go sygnować. I tylko tego jednego usera. Możesz sobie zmienić ręcznie je ale żaden szanujący się system nie robi takich rzeczy. 

Aby przedłużyć ważność to trzeba robić zapytanie do bazy dany.....

Skoro puszczenie SQLa Cię przerasta to możesz robić back-end w firebasie. Nie wiem w czym jest problem.

komentarz 20 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
edycja 20 września 2019 przez JakSky
Ja tam wolę bezpieczne i sprawdzone rozwiązania. Jak chcesz to korzystaj :D

Poza tym w aplikacjach typu SPA często najlepszym rozwiązaniem jest utworzenie stałego połączenia np. za pomocą biblioteki SignalR i uwierzytelnienie tylko przy nawiązywaniu połączenia, więc JWT nie ma sensu używać.
komentarz 20 września 2019 przez Ehlert Ekspert (212,630 p.)

Pewnie. Pół świata ma SPA + REST API JWT, ale co tam. Niebezpieczne. Ja wiem lepiej nie? wink

komentarz 20 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
Myślę, że z JWT jest podobnie jak z jQuery czy AngularemJS. Dużo ludzi idzie w to bo jest modne i tyle a nie, że uważa za praktyczne czy wygodne.
komentarz 20 września 2019 przez Ehlert Ekspert (212,630 p.)

Porównujesz JWT będące standardem do jQuery/Angulara które de facto są libkami/frameworkami. Jednocześnie sam wyjeżdżasz z jakąś .NETową libką sugerując, że dla spa rozwiązania stałopołączeniowe są najlepsze. Piszesz to ogólnie nie podając żadnego kontekstu czy przypadku biznesowego w którym warto byłoby tego użyć. 

Analogia do "moje zabawki są lepsze".

komentarz 21 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
Niczego nie porównuję. Mam na myśli trendy w IT czy to jakiś język, biblioteka czy standard to nie ma znaczenia. I tak jest zapewne też z JWT, wykorzystują bo jest modne. Pomijam już fakt, że często wykorzystują go źle. Taki JWT to dobre rozwiązanie jak mamy np. robota w fabryce(ma ciągle te same Id, te same role i w dodatku działa w jakieś lokalnej sieci) i bezstanowość JWT nie będzie problemem. Co innego aplikacje webowe gdzie mamy duży ruch i dobrze byłoby mieć większą kontrolę kto i gdzie jest zalogowany - w takim przypadku bezstanowość tylko to utrudnia.

Podobne pytania

0 głosów
1 odpowiedź 436 wizyt
pytanie zadane 30 czerwca 2018 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 681 wizyt
pytanie zadane 8 lipca 2018 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
0 odpowiedzi 200 wizyt
pytanie zadane 1 lipca 2018 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...