Implementacja refresh tokena

0

Cześć,

chciałbym zaimplementować refresh token do swojej apki, ale pojawia się parę pytań:

  • access tokena nie trzymam w bazie, ale refresh token chyba będę musiał? gdzie go trzymać? normalnie w User czy osobna kolekcja?
  • czy przy każdym nowym logowaniu generuje też nowy refresh token?
  • potrzebuję endpoint np /refresh, jak tam przesyłać ten token? normalnie w body? i co ten endpoint ma zwracać, tylko nowy access token czy też nowy refresh token?
  • co w przypadku gdy wygaśnie refresh token?
1
rzeznik997 napisał(a):

Cześć, chciałbym zaimplementować refresh token do swojej apki, ale pojawia się parę pytań:

  • access tokena nie trzymam w bazie, ale refresh token chyba będę musiał? gdzie go trzymać? normalnie w User czy osobna kolekcja?

Możesz w user, możesz w osobnej kolekcji.

  • czy przy każdym nowym logowaniu generuje też nowy refresh token?

Tak, stary usuwasz, chyba że chcesz mieć miliard niepotrzebnych danych.

  • potrzebuję endpoint np /refresh, jak tam przesyłać ten token? normalnie w body? i co ten endpoint ma zwracać, tylko nowy access token czy też nowy refresh token?

Tak, potrzebujesz. Może być w body. Powinien na pewno zwrócić access token. A czy powinien zwrócić refresh token - to zależy od Ciebie.
Jak chcesz, żeby ktoś był wiecznie zalogowany, to warto wysłać mu nowy refresh token.
Jak chcesz, żeby ktoś po jakimś czasie musiał ponownie wprowadzić login/haslo - to nie musisz mu tego nowego refresh tokena wysyłać

  • co w przypadku gdy wygaśnie refresh token?

Odpowiedź w drugiej opcji powyżej - user będzie musiał zalogować się ponownie i otrzyma nowy access token i refresh token.

1
rzeznik997 napisał(a):

Cześć,

chciałbym zaimplementować refresh token do swojej apki, ale pojawia się parę pytań:

  • access tokena nie trzymam w bazie, ale refresh token chyba będę musiał? gdzie go trzymać? normalnie w User czy osobna kolekcja?
  • czy przy każdym nowym logowaniu generuje też nowy refresh token?
  • potrzebuję endpoint np /refresh, jak tam przesyłać ten token? normalnie w body? i co ten endpoint ma zwracać, tylko nowy access token czy też nowy refresh token?
  • co w przypadku gdy wygaśnie refresh token?

Skupiasz się bardzo na implementacji tego co robisz, a powinieneś się bardziej skupić na tym co próbujesz osiągnąć i po co.

  • Po co jest access token - po to żeby korzystać z aplikacji
  • Po co jest refresh token - po to żeby dostać nowy access token

To jak to "pod spodem" ogarniesz, nie ma większego znaczenia, to Twoje szczegóły implementacyjne, i możesz to rozwiązać w dowolny sposób jaki chcesz. Np odpowiadając na pytanie

rzeznik997 napisał(a):

potrzebuję endpoint np /refresh [...] i co ten endpoint ma zwracać, tylko nowy access token czy też nowy refresh token?

Odpowiedź na to pytania wymaga zastanowienia się co tak na prawdę Ty chcesz zrobić. Czy chcesz żeby podczas refreshu user dostał refresh token czy nie. Powinieneś wiedzieć jakie są tego konsekwencje, wady i zalety.

Oczywistą konsekwencją jest np to, że jeśli Twój klient (np przeglądarka) nie ma aktualnego refresh tokenu ani access tokenu, to to jest właściwe tożsame z tym jakby nie był zalogowany.

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