/ / Sprawdzanie poprawności podpisu tokenu JWT javascript - javascript, security, jwt

Weryfikacja podpisu tokenu JWT javascript - javascript, security, jwt

Robiłem klienta javascript, z którym się łączyApi używające tokenów JWT. Po stronie serwera nie ma problemów, mogę utworzyć token podpisać go, a następnie zweryfikować podpis en, dzięki czemu upewnić się, że nikt nie naruszony z tokena.

Ale jak to zrobić po stronie klienta. Mogę po prostu odszyfrować token JWT i zobaczyć nagłówek, ładunek i podpis. Ale w jaki sposób mogę zweryfikować podpis w witrynie klienta? Czy istnieją biblioteki do tego, w jaki sposób mogę przenieść klucz publiczny do klienta?

Jeśli nie weryfikuję podpisu, skąd wiadomo, że token nie jest naruszony?

Odpowiedzi:

2 dla odpowiedzi № 1

jeśli nie sprawdzam poprawności podpisu po stronie klienta, jak mogę się upewnić, że token rzeczywiście pochodzi z serwera? Może jest ktoś pośrodku, który zmienia token

Potwierdzenie podpisu nie pozwala uniknąć ataku Man In The Middle. Osoba atakująca może powąchać kanał, aby przechwycić dane uwierzytelniające lub zmienić komunikaty, nawet używając prawidłowych tokenów

Użyć Kanał SSL / TLS (https)


Jeśli nie weryfikuję podpisu, skąd wiadomo, że token nie jest naruszony?

Token dostarczany przez zaufany serwer TLS to prawdopodobnie prawidłowy. (mógł zostać zmieniony w pamięci lokalnej). Możesz zweryfikować podpis. Ta operacja jest zwykle wykonywana po stronie serwera (patrz odpowiedź @sakuto), ale możesz to zrobić w przeglądarce idealnie

Ale w jaki sposób mogę zweryfikować podpis w witrynie klienta?

Oto kroki

  1. Pobierz klucz publiczny z zaufanego serwera
  2. wyodrębnij sygnaturę z JWT i ją odkodować (base64url)
  3. sprawdź podpis cyfrowy za pomocą biblioteki kryptograficznej

Proponuję użyć Webcrypto. Zobacz przykład klucza importu RSA i sprawdzanie poprawności tutaj: https://github.com/diafygi/webcrypto-examples/blob/master/README.md#rsassa-pkcs1-v1_5


3 dla odpowiedzi № 2

Zazwyczaj nie przeprowadzasz weryfikacjipo stronie klienta, ani przechowywania ważnych danych na tokenie. Każda kontrola i uprawnienie są sprawdzane na zapleczu. Oznacza to, że nawet jeśli użytkownik dokona manipulowania swoim tokenem, nie będzie w stanie przejść kontrolki zaplecza, prawdopodobnie widząc jeszcze jedną opcję z przodu.