JWT – JSON Web Token

JWT jest to jeden ze sposobów uwierzytelnienia jak i za razem autoryzacji.

Jak to działa?

1. Na początku użytkownik musi uzyskać token (JWT). Aby to zrobić musi się uwierzytelnić za pomocą przykładowo loginu i hasła.
2. Serwer w odpowiedzi odsyła token (JWT).
3. Od teraz użytkownik powinien zawsze dołączać token (JWT) przy próbie dostępu do chronionych zasobów (wykorzystując do tego nagłówek HTTP Authorization oraz schemat Bearer. Patrz Uwierzytelnienie tragarza tokenu).

Budowa

JWT składa się z trzech części oddzielonych od siebie kropkami:

NAGLOWEK.ZAWARTOSC.PODPIS

Przykład

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiRGFtaWFuIiwic3VybmFtZSI6IlJhZG93aWVja2kiLCJwZXJtaXNzaW9ucyI6ImFkbWluIn0.ZoG_qeYM0M7wbGuRCDgUCTWo9LVx538nO4zzq0-EUCOMFIoap3l4S8EXn5zSxwdQ

Nagłówek

Zawiera informacje, zakodowane za pomocą algorytmu Base64, o algorytmie podpisującym oraz o typie tokenu. Biorąc następujący nagłówek:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

będzie on odpowiadać:

{
  "alg": "HS384",
  "typ": "JWT"
}

Zawartość

Jest to po prostu opis podmiotu (najczęściej użytkownika) zakodowany algorytmem Base64. Może zawierać dowolne informacje jakie są wymagane przez serwer. Przykładowo:

eyJuYW1lIjoiRGFtaWFuIiwic3VybmFtZSI6IlJhZG93aWVja2kiLCJwZXJtaXNzaW9ucyI6ImFkbWluIn0

będzie odpowiadał następującej treści:

{
  "name": "Damian",
  "surname": "Radowiecki",
  "permissions": "admin"
}

Podpis

Zawiera, połączone kropką, podpisane dane z nagłówka i zawartości. Możliwe są do wykorzystanie różne algorytmy podpisujące. Celem podpisu jest zapewnienie, że nagłówek i zawartość nie uległy zmianie podczas transportu.

Przykład podpisu HMACSHA384

Szyfrowanie za pomocą HMACSHA384:

HMACSHA384(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),

  my-secret

)

Da następujący rezultat:

ZoG_qeYM0M7wbGuRCDgUCTWo9LVx538nO4zzq0-EUCOMFIoap3l4S8EXn5zSxwdQ

Warto zajrzeć

1. https://datatracker.ietf.org/doc/html/rfc7519
2. https://jwt.io/

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *