System tokenów - Symfony API

System tokenów - Symfony API
M1
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
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.

SG
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:103
1

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

AL
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:15
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.

bspz
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:1
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?

AL
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:15
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.

M1
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
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?

czysteskarpety
czysteskarpety
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
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.


AL
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:15
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.

M1
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
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

serek
  • Rejestracja:około 11 lat
  • Ostatnio:około godziny
  • Postów:1472
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ą.

AL
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 lat
  • Postów:15
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)