Jaką metodę autentykacji wybrać dla aplikacji korporacyjnych?

Jaką metodę autentykacji wybrać dla aplikacji korporacyjnych?
bbhzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 108
0

Cześć,
uczę się tworzyć Asp Netowe API i mam pytanie odnośnie autentykacji użytkowników.

Na sam początek zaznaczę, że aplikacje, które mam zamiar z tym API tworzyć:

  • Będą używały Angulara
  • Będą typowo biznesowo / korporacyjne: systemy zarządzania pracownikami, CRM, itd. Do wykonania jakiejkolwiek akcji użytkownik będzie musiał być zalogowany.

Zgłębiłem trochę temat i wiem, że są dwa główne podejścia: JWT i pliki cookies.

Na temat JWT wyczytałem bardzo dużo - jedni mówią, że jest super, a drudzy - że nie ... uzasadnień tych opinii nie mogłem się już doszukać :) Jedną z rzeczy, którą słyszałem, jest to, że JWT nie umożliwia tradycyjnego wylogowywania się, tylko traci ważność bo jakimś krótkim czasie. Z drugiej strony natomiast, jsonowe tokeny lepiej nadają się do aplikacji typu SPA, niż ciasteczka.

Które podejście, w kontekście moich aplikacji, moglibyście mi polecić? Przyznam, że do tej pory patrzyłem na poradniki dotyczące tylko JWT i przeraziła mnie trochę ilość kodu, którą trzeba napisać (im więcej linijek, tym więcej okazji na popełnienie błędu / luki w zabezpieczeniach).

Natknąłem się także na poradniki korzystające z Identity w .NET 8, ale generują one bardzo dużo gotowego kodu (5 endpointów, tabela w bazie danych, itd.). Wiem, że wcześniej narzekałem na ilość linijek implementacji JWT, ale wolałbym samemu zdefiniować np. encję użytkownika - moim przypadku konta będzie tworzyć administrator aplikacji, więc nie ma potrzeby podawania adresu email i potwierdzania go.

Z góry bardzo dziękuję.

KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 471
2

Co do braku możliwości natychmiastowego wylogowania usera w przypadku JWT to nie jest do końca prawdą - da się to ogarnąć (wystarczy przechowywać nieaktywne tokeny, których okres ważności nie minął, co trochę komplikuje temat, ale się da).
Poza tym wydaje mi się, że większy problem jest ze zmianą uprawnień usera - tu sytuacja jest analogiczna, ale wydaje mi się, że ma to większe znaczenie (chcesz usera zbanować, a on jeszcze przez kilka minut korzysta z uprawnień).
Pytanie czy to naprawdę ma takie znaczenie? Bo wydaje mi się, że te kilka minut niczego nie zmieni.

Główną wadą ciasteczek jest to, że jesteś uzależniony od jednego serwera. W przypadku JWT możesz w banalny sposób rozproszyć sobie dane na różne serwery. Ogólnie zgadzam się z tezą, że w większości aplikacji wystarczą ciasteczka i nie ma sensu komplikować sobie życia, ale osobiście wybrałbym bardziej elastyczne podejście tj. JWT. Istotne jest, abyś zrozumiał jak to działa a nie tylko przepisywał kod z tutoriali.

bagietMajster
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 455
1

Ja chciałbym ci odradzić Identity, spędzisz na konfiguracji więcej czasu niż nad JWT + będziesz musiał utrzymać ten wygenerowany kod. To jest molch do molochowych rzeczy, poza projektami korporacyjnymi odradzam.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10307
3

Nie ma znaczenia. Wybierz to które Ci się bardziej podoba, i napisz autentykację tak żeby dało się ją w łatwy sposób zmienić (np. schowaj całą logikę w jednej klasie na serwerze i jednym miejscu w kliencie). Kiedy będziesz chciał ją zmienić, to powinno się to dać prosto zrobić.

W skrócie:

  • Ciastka są "najprostsze"
  • JWT się używa kiedy nie chcesz mieć sesji na serwerze
RJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 496
5

Monolit? Cookies.
Mikroserwisy? JWT.
SSO? JWT.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.