nagłówek
nagłówek JWT składa się z typu tokena i algorytmu używanego do podpisywania i kodowania. Algorytmy mogą być HMAC, SHA256, RSA, HS256 lub RS256.
{
"typ": "JWT",
"alg": "HS256"
}
ładunek
ładunek składa się z danych sesji zwanych oświadczeniami. Poniżej znajdują się niektóre standardowe twierdzenia, które możemy wykorzystać,
- Emitent(iss)
- temat (sub)
- publiczność (aud)
- czas wygaśnięcia (exp)
- wyemitowany w (iat)
{
"sub": "user10001",
"iat": 1569302116
}
roszczenia niestandardowe mogą być również zawarte w zestawie roszczeń. Podczas korzystania z niestandardowych zestawów oświadczeń,
- nie umieszczaj dużych danych w zestawach roszczeń. Zestawy wierzytelności miały być zwarte.
- nie umieszczaj poufnych informacji, ponieważ JWT można łatwo dekodować.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
podpis
podpis jest najważniejszą częścią Tokena internetowego JSON (JWT). Podpis jest obliczany poprzez kodowanie nagłówka i ładunku za pomocą kodowania Base64url i połączenie ich z separatorem kropek. Które następnie przekazywane jest algorytmowi kryptograficznemu.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
więc po zmianie nagłówka lub ładunku podpis musi zostać ponownie obliczony. Tylko dostawca tożsamości(IdP) ma klucz prywatny do obliczenia podpisu, który zapobiega manipulowaniu tokenem.
Jak to działa?
zasadniczo dostawca tożsamości (IdP) generuje JWT certyfikujący tożsamość użytkownika i dekoduje Serwer zasobów i weryfikuje autentyczność tokenu za pomocą tajnego klucza salt / public.
- logowanie użytkownika przy użyciu nazwy użytkownika i hasła lub google / facebook.
- serwer uwierzytelniania weryfikuje poświadczenia i wydaje jwt podpisane przy użyciu tajnego klucza salt lub prywatnego.
- Klient użytkownika używa JWT, aby uzyskać dostęp do chronionych zasobów, przekazując JWT w nagłówku autoryzacji HTTP.
- Serwer zasobów następnie weryfikuje autentyczność tokenu za pomocą tajnego klucza salt/ public.