Korzystam z tokenów JWT w nagłówkach HTTP do uwierzytelniania żądań do serwera zasobów. Serwer zasobów i serwer uwierzytelniania to dwie osobne role robocze na platformie Azure.
Nie mogę się zdecydować, czy mam przechowywać roszczenia w tokenie, czy dołączyć je do żądania / odpowiedzi w inny sposób. Lista roszczeń wpływa na wyświetlanie elementów interfejsu użytkownika po stronie klienta, a także na dostęp do danych na serwerze. Z tego powodu chcę się upewnić, że roszczenia otrzymane przez serwer są autentyczne i sprawdzone przed przetworzeniem żądania.
Przykłady roszczeń to: CanEditProductList, CanEditShopDescription, CanReadUserDetails.
Powody, dla których chcę dla nich użyć tokena JWT, to:
- Lepsza ochrona przed edycją roszczeń po stronie klienta (tj. Hakowaniem listy roszczeń).
- Nie trzeba sprawdzać roszczeń na każde żądanie.
Powody, dla których nie chcę używać tokena JWT:
- Serwer autoryzacji musi następnie poznać listę roszczeń ukierunkowanych na aplikacje.
- Token staje się pojedynczym punktem włamania.
- Przeczytałem kilka rzeczy, które mówią, że tokeny JWT nie są przeznaczone dla danych na poziomie aplikacji.
Wydaje mi się, że oba mają wady, ale skłaniam się ku włączeniu tych roszczeń do tokena i chcę po prostu kierować tym przez osoby, które wcześniej sobie z tym poradziły.
UWAGA: Będę używać HTTPS do wszystkich żądań API, więc wydaje mi się, że token będzie bezpieczny „wystarczająco”. Używam AngularJS, C #, Web API 2 i MVC5.
źródło
Odpowiedzi:
Przechowuję tylko oświadczenia identyfikatora (identyfikator użytkownika itp.) (Zaszyfrowane) w moim pliku JWT.
Następnie, gdy otrzymam token na serwerze (API), mogę wykonać wyszukiwanie po stronie serwera (db lub lokalny interfejs API sieci) i pobrać wszystkie powiązania z identyfikatorem użytkownika (aplikacje, role itp.)
Jeśli jednak chcesz włożyć więcej do pliku JWT, po prostu uważaj na jego rozmiar, ponieważ prawdopodobnie zostanie on wysłany przy każdym żądaniu, ale pamiętaj o zaszyfrowaniu poufnych danych roszczenia.
źródło
Wygląda na to, że uwierzytelnianie (kim jest użytkownik) i autoryzacja (co użytkownik może robić) nie są tak podzielone, jak byś chciał.
Jeśli nie chcesz, aby serwer uwierzytelniający wiedział, do czego ma prawo użytkownik, ogranicz roszczenia w tym JWT do identyfikatora użytkownika, tak jak to sugeruje. Możliwe, że inny serwer, znany jako serwer autoryzacji, sprawdzi, do czego użytkownik jest uprawniony.
Serwer autoryzacji może wykonać krok autoryzacji, gdy klient po raz pierwszy przedstawi token uwierzytelnienia. Serwer zasobów wyśle następnie do klienta token zawierający oświadczenia o autoryzacji.
Uwaga: oba JWT powinny być podpisane różnymi kluczami.
Plusy:
Kon:
źródło