Cześć i czołem.
Uznałem ostatnio, że wystarczy zabezpieczania moich API przy użyciu zwykłego tokena i zacząłem czytać o OAuth2. Napisałem sobie prostego CRUD-a w Laravelu przy użyciu Laravel Passport i wszystko działa, ale nie bardzo rozumiem co stoi za zabezpieczeniem autoryzacji.
Otóż mam np. endpoint GET, powiedzmy /api/users/
który ma mi zwrócić wszystkich userów. Jeśli zrobię to bez wysyłania bearer tokena, to dostaję oczywiście 401 Unauthorized. Token uzyskuję wysyłając zapytanie POST na /oauth/token/
, gdzie przesyłam client_id, client_secret, grant_type, username i password, a w odpowiedzi dostaję token ważny rok, dzięki czemu serwer może mnie zidentyfikować.
I tu pojawiają się moje wątpliwości:
- Kiedy powinien być generowany client_secret? W momencie jak rejestruje się nowy użytkownik, to serwer powinien generować nowego client_secret powiązanego z ID nowego użytkownika?
- Mając napisane SPA w jakimś React czy Vue, jak powinienem uzyskiwać i przechowywać Token? W momencie logowania przesyłam login i hasło, a serwer przesyła to sobie dalej i w odpowiedzi zwraca mi token?
- Jeśli tak, to gdzie mam przechowywać ten token? LocalStorage, Store?
- Co jeśli ktoś niepowołany ukradnie ten token? Będzie miał wtedy pełne pole do działania tak samo, jak gdyby znał login i hasło?