Mam interfejs API REST Node-Express, w którym mogę wysłać żądanie GET do kontrolera użytkownika - /users/:id
- gdzie :id
to numer identyfikacyjny użytkownika przechowywany w bazie danych. Mam również aplikację po stronie klienta React-Redux, która wykonuje wywołanie do interfejsu API. Aby spełnić żądanie, aplikacja kliencka musi mieć dostęp do identyfikatora użytkownika, ale obecnie nie jestem pewien, w jaki sposób najlepiej przechowywać identyfikator użytkownika po stronie klienta.Przechowywanie ID użytkownika w aplikacji po stronie klienta dla żądania API
Dla dodatkowego kontekstu, mój interfejs API wysyła do klienta: JWT token przy logowaniu zawierającym identyfikator użytkownika; aplikacja klienta zapisuje token w wersji localStorage
. Kiedy klient wysyła żądanie, API sprawdza, czy identyfikator użytkownika w dekodowanym tokenie jest zgodny z identyfikatorem zawartym w adresie URL przed wysłaniem odpowiedzi do klienta.
Widzę dwa możliwe rozwiązania:
- Decode tokenu JWT na kliencie i użyć identyfikator użytkownika przechowywane w znak, aby wykonać połączenie API. Myślę, że to potencjalne zagrożenie bezpieczeństwa, ponieważ uważam, że będę musiał przechowywać sekret w aplikacji klienckiej. Każdy, kto ma token, może uzyskać dostęp do informacji o użytkowniku.
- Interfejs API wysyła identyfikator użytkownika podczas uwierzytelniania, a klient zapisuje go w numerze
localStorage
. (Nie sądzę, aby przechowywanie go w sklepie Redux działało, ponieważ użytkownik mógłby odświeżyć, wyczyszczając stan identyfikatora użytkownika). Mam wrażenie, że nie jest to najlepsza praktyka, ponieważ nie widzę wielu innych aplikacji klienckich przyjmujących takie podejście.
Który z nich jest lepszym rozwiązaniem, czy istnieje inne podejście, którego nie rozważam?
Odpowiadając na swoją pierwszą opcję: czy nie byłoby to sprzeczne z konwencjami REST api? Zasadniczo, jeśli nie podano identyfikatora, który będzie wyglądał jak '/ users /', mówisz, że powinien pobrać identyfikator z tokena, ale dojście do '/ users /' wskazuje, że klient chce uzyskać listę WSZYSTKICH użytkowników . – Nahro