JWT przechowywane w bazie danych

0

Witam

Tworzę serwis, który będzie pośrednikiem innych serwisów. Zasada mojego serwisu jest bardzo prosta jednak mam może nie problem tylko pytanie dotyczące przechowywania tokenu JWT z innych serwisów, które będzie mógł użytkownik podłączyć u siebie w profilu.

  1. Użytkownik tworzy konto w moim serwisie
  2. W profilu może podłączyć jakieś inne serwisy np Mantis. Jakiś serwis który zwraca nam JWT do autoryzacji i wystawia API

Pytanie jest tego typu czy poprawnym działaniem będzie przechowywanie tych tokenów JWT w bazie w rekordzie z podłączonym kontem czy jednak gromadzić je tylko i wyłącznie w pamięci przeglądarki ?

Rozwiązanie gromadzenia tokenów po stronie bazy danych i dopisywanie ich do rekordów z dodanym serwisie pozwoliło by na 100% automatyzację oraz pozwoliło by użytkownikowi korzystać z tego samego tokena aż do czasu jego wygaśnięcia zaś gromadzenie tokena po stronie przeglądarki zmuszało by za każdą zmianą przeglądarki odświeżanie tych kont poprzez użytkownika w celu wygenerowania JWT i zapisania ich w pamięci przeglądarki. Jakie jest wasze zdanie na ten temat. Dodam że serwisów może być kilka dopisanych do konta użytkownika.

EDIT: Oczywiście moja strona również będzie generowała token i ten token będzie normalnie zapisany w przeglądarce tutaj rozchodzi się o tokeny dopisanych serwisów. Dzięki pierwszemu podejściu użytkownik nie musiał by wysyłać z każdym requestem tokenu tylko aplikacja pobierała by token danego serwisu i generowała z nim requesta do API

EDIT2 : https://api.slack.com/docs/oauth-safety punkt 7/6. Application layer and Presentation layer jest tam wzmianka na ten temat.

0

gromadzenie tokena po stronie przeglądarki zmuszało by za każdą zmianą przeglądarki odświeżanie tych kont poprzez użytkownika w celu wygenerowania JWT i zapisania ich w pamięci przeglądarki.

Uważam, że taki scenariusz występuje rzadko. Wypadałoby najpierw zbadać jak często użytkownicy sobie tak skaczą pomiędzy przeglądarkami.

1

Oba rozwiązania są poprawne, tyle że obu nie możesz mieć naraz, więcej stajesz przed najprzyjemniejsza częścią w pracy programisty, musisz dokonać wyboru który wpłynie w dużym stopniu na dalszy wygląd systemu który budujesz :). Kilka moich spostrzeżeń do trade-offu/kompromisu który musisz wybrać:

  • przechowywanie tokenów w bazie : większy ruch na serwerach, jeśli tokeny wyciekną z bazy większy problem, więcej programowania na backendzie
  • przechowywanie tokenów u użytkownika : mniejszy ruch na serwerach, więcej programowania na froncie
0

Czy mi się wydaje, czy próbujesz wymyślić IdentityServer?

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