Gdzie trzymacie token JWT w aplikacjach typu SPA (np. Angular, React)?

localStorage - jak będzie atak XSS, to atakujący wykradnie token lub wykona CSRF
ciastka HTTP only - możliwy do wykonania atak CSRF (bo kto stosuje tokeny anty-CSRF w REST API?)

W przypadku aplikacji mobilnych ciastka odpadają (chyba że to PWA).
@SendMeAnAngel: kwestia tego na jakim poziomie jest wymagane security w twoim projekcie, jesli nie robisz np aplikacji bankowej to nie powinienes sie tym przejmowac, ciezar lezy po stronie uzytkownika w przeciwnym wypadku zajmie sie tym BE, walidujac token z fingerprintem/ip/hwid usera opcji jest wiele lacznie z regeneracja tokenu czy krotka sesja (wygoda uzytkownika w przypadku duzego bezpieczenstwa nie jest priorytetem)
  • Odpowiedz
via Wykop Mobilny (Android)
  • 21
Lustra teleskopu James Webb zostały bardzo wstępnie skalibrowane, teraz czas na szczegółową kalibrację. Pewnie pamiętacie pierwsze zdjęcie wykonane przez JWT, przedstawiające gwiazdę HD 84406, które wyglądało jak sieczka. Teraz wygląda już znacznie lepiej. Póki co, każde z 18 luster działa jak oddzielny teleskop, jednym z następnych kroków będzie połączenie ich w jeden teleskop, ale do tego potrzeba znacznie bardziej precyzyjnej kalibracji.

https://blogs.nasa.gov/webb/2022/02/25/webb-mirror-alignment-continues-successfully/

#kosmos #webb #nasa #
chlodna_kalkulacja - Lustra teleskopu James Webb zostały bardzo wstępnie skalibrowane...

źródło: comment_1645867377mcseSi9g78TYT3DsJqWAN1.jpg

Pobierz
#react #programowanie #naukaprogramowania #jwt

Mirki, jaki jest obecny standard w normalnej firmie IT odnośnie łączenia JWT (jako token do uwierzytelniania requestów) i SPA (np. React)? Znam kilka metod poniżej, ale chciałbym wiedzieć czego w rzeczywistości się używa?

1. JWT w localstorage -> wbrew dziesiątkom art. na necie twierdzącym, że to samo zło, sporo osób twierdzi, że tego używa i się nie przejmują XSS, koronny argument jest taki, że jak ktoś uzyska dostęp to i tak jwt to najmniejszy problem bo może zrobić dużo więcej złego.

2.
@Loperamid: właśnie to co napisałeś to punkt 3 mojego wpisu, z JS nie odczytasz, ale jak ktoś ma dostęp do przeglądarki to jaka jest różnica względem 1-2? I tak requesty są podpisane.

a odnośnie Twojego pytania to czytałem o wrzucaniu w ten sposób keyloggera czy podrzucaniu phishingowych formów dzięki czemu można łatwo uzyskać np. dostęp do banku
  • Odpowiedz
@TomAtari: Faktycznie, dopiero doczytałem. W sumie żadna różnica. Jeśli potrzebujesz żeby Twój JS miał dostęp do JWT to trzymasz go w localstorage, ale wtedy może go odczytać także XSS. Ciasteczka są o tyle lepsze, że możesz ustawić HTTPOnly i zabezpieczyć się przed XSSami. Requesty to prawda są podpisane, ale możesz ustawić SameSite na ciasteczku albo zaimplementować inną ochronę przed CSRF i będziesz miał podpisane tylko te requesty, których się spodziewasz.
  • Odpowiedz
@gajowy_marucha: Chodzi o to żeby sam token się autoryzował bez uderzania do głównej bazy (serwera autoryzującego), a jednocześnie użytkownik miał możliwość wycofania tych zezwoleń. Wycofanie nastąpi poprzez zablokowanie odświeżania (plus jakieś tymczasowe listy, powiadomienia... zależy co potrzebne i gdzie wycofano).
Sytuacja podobna do posługiwania się jakimś dokumentem, którego posiadanie uprawnia do czegoś bez konsultacji z instytucją która go wydała.
  • Odpowiedz
#java #jwt #securit #spring

Mirki, robię apkę do generowania JWT w spring boocie. Apka ma udostępniać klucze publiczne, przez które serwisy sobie będą walidować tokeny (jak tutaj: https://login.microsoftonline.com/common/discovery/v2.0/keys)

No i pojawia się pytanie : Będę miał wiele kluczy prywatnych/publicznych ładowanych z pliku. Każdy prywatny klucz będzie miałzbiór publicznych kluczy (żeby nie generować tokenu zawsze tym samym kluczem prywatnym).

Klient
@mariusz-laszczka: moim zdaniem tak: jeśli generujesz klucz publiczny załóżmy nadajesz mu jakieś uid i zapisujesz to w bazie, uid klucza publicznego umieszczasz w payload JWT.
Wtedy service może zdekodować token, odczytać uid klucza prywatnego (z payload), wysyła zapytanie do Ciebie, odsyłasz klucz publiczny i service waliduje token i zapisuje sobie public key na przyszłość.
  • Odpowiedz
Mam problem, robię sobie projekt (ASP.NET Core 2.0), gdzie będzie kilka ról (używam JWT), każda będzie rozszerzoną wersją innej (user ma swoje prawa, mod jest userem + modem, admin ma moda plus coś jeszcze itp), prosta hierarchia. Da się zrobić tak, żeby user mógł mieć jedną rolę (skoro jest modem, to wiadomo że jest też userem) z pominięciem niższych i nie dodawać wielu ról do [authorize]? Chodzi mi o to, żeby do
@Goglez: services.AddAuthorization(x => x.AddPolicy("IsUserOrAbove", p => p.RequireRole("admin", "mod", "user")));

cos na takiej zasadzie. I potem kontroler oznaczasz:
[Authorize(Policy = "IsUserOrAbove")]

i analogicznie inne
  • Odpowiedz
@damian44__: najbezpieczniej byłoby zaimplementować tam "prawdziwe" logowanie się, czyli dostęp tylko zautentyfikowanego użytkownika, najwyżej żeby nie musieli za każdym włączeniem wpisywać tego samego niech jakieś ciasteczka/storage/sesja czy co tam jeszcze jest w electronie trzyma to w jakiejś pamięci apikacji, a plus będzie taki że robiąc kopiuj-wklej nikt nie zabierze dostępów ze sobą
  • Odpowiedz
Mireczki zapewne głupie pytanie, ale znacie strone/githuba czy gdzieś z dobrze zrobioną implementacją jwt w springu? Tego jest mnóstwo i niestety każda się różni w jakiś sposób. Po prostu chciałbym przeanalizować krok po kroku, ale wolałbym raz, a nie 10 po trochu ( ͡° ʖ̯ ͡°)

#java #programowanie #jwt
Czy .net core ma mechanizm do połącznie JwtBearer i Cookie dla leniwych czy trzeba middleware pisać? Przypadek użycia (wszystko z backendu): Dostaję jwt token z auth server -> wrzucam go w cookie -> wchodzę w zasób z [Authorize] -> dostaję do tego pozwolenie + mogę zgrabnie odczytać HttpContext.User.Identity...

#dotnetcore #dotnet #jwt #aspnet #programowanie
Prosty middleware dodający header Authorize w locie znaleziony na stackoverflow dał oczekiwany skutek. Chociaż nie wydaje mi się że jest to najpiękniejsze rozwiązanie. Reszta to .AddJwtBearer()
  • Odpowiedz
@bonus: Używałem. Co prawda nie w projekcie na wielką skalę, a w niewielkim REST API w Node, ale coś tam wiem. Jak masz jakies pytania to śmiało.
  • Odpowiedz