JWT(JSON Web Tokens) üç ana kısımdan oluşmaktadır:
- Header (Başlık) : Token tipi ve imza için kullanılacak algoritma bulunur
- Payload (Veri) : Verilerin claim'ler şeklinde tutulduğu ana içerik yeri
- Signature (İmza) : Header ve payload'ın birleştirilip bir key ile header'a verilen algoritmaya göre imzalanmış bölümü
Bu üç bölüm
header.payload.signature
yapısında birleştirilerek gönderilir.
Örneğin HMAC SHA256 algoritması kullanılmak istendiğinde imza bölümü şu şekilde oluşur:
HMACSHA256(
base64UrlEncode(header) + ,
"." +
base64UrlEncode(payload),
secret-key
)
Aşağıdaki gibi gözükebilir:
JWT(JSON Web Tokens) da Payload içinde üç tip claim olabilir :
- Registered : iss (issuer = kuruluş), exp (expiration time = expire zamanı), sub (subject - kullanıcı veya istemci), aud (hedef kitle) gibi tanımlı (registered) olan claim'ler
- Public : Alıcı ve gönderici tarafından yaratılan herkes tarafından bilinen (public) claim'ler
- Private : Sadece Alıcı ve gönderici tarafından bilinen gizli (private) claim'ler
JWT (JSON Web Tokens) ile basitçe doğruma süreci şu şekilde olur.
1. Kullanıcı veya servis önce kullanıcı adı ve şifresi ile login olur.
2. Login sonrası cevap olarak JWT token'ı dönülür.
3. Bundan sonraki tüm isteklerde kullanıcı veya servis bu token'i gönderir
4. Gelen isteklere cevap veren servis gelen token'ı kontrol eder ve token'ı doğrular ve kullanıcı adı ve bilgilerini buradan alır. Eğer doğrulama geçersiz ise istek reddedilir.
2. adımda JWT token'ı oluşturma işleminde bir gizli anahtar kullanılır. Header ile Payload aralarına . konularak birleştirilir ve gizli anahtar ile şifrelenir. Ve Header.Payload.Signature dan oluşan JWT token'ı istemciye gönderilir. İstemciye gönderme için Header'a
Authorization: Bearer MYTOKEN şeklinde token eklenmelidir.
4. adımda ise gelen token'ı doğrulama için gelen token'dan Header.Payload ifadesi daha önce kullanılan gizli anahtar ile imzalanır. İmzalanma sonucu üretilen sonuç, token ile gelen Signature bölümü ile aynı ise doğrulanma gerçekleşir. Değilse geçersiz bir token olduğu anlaşılır ve istek reddedilir.