JWT Nedir

jwt-nedir jwt-nedir

JWT Token Nedir ?

JWT Token (JSON Web Token) daha çok web uygulamalarında işlemleri yetkili kullanıcıların yapıp yapmadığını doğrulamaya yarayan bir doğrulama yöntemidir. JSON isminin kullanılması API iletişimlerinde JSON yapısının kullanılması ve direkt Json yapısının formatlanması, imzalanmasıyla ilgilidir. XML yapılarında da benzer yöntemler bulunmaktadır.

JWT Token Öncesi

JWT Token öncelerinde cookie ve session kavramları çok yaygındı. Cookie’lerde taşınan session bilgileri web sunucusunun içerisinde barındırılırdı. Hala küçük ölçekli basit siteler için yaygın kullanılsa da uygulama sunucusu içerisinde barınması risk teşkil eder. JWT’nin dağıtık sistemlerde çalışması daha yaygındır. Düzgün korunmayan JWT’de aynı session gibi risk teşkil edebilir.

JWT – JWE – JWS

JWT dediğimiz olayda bir gizililik esası yoktur. Token’da bilgiler açık olarak tutulmaktadır. Son Signature katmanıyla istemcinin doğrulanması gerçekleşir. JWE(JSON Web Encryption) ve JWS(JSON WEB Signature) de JWT’nin birer protokolleridir. Son katmandaki işlemin ne ile yapılacağını belirler. Son katmanda ilk iki katmandaki verilerin birleşimi encryption ya da sign işleminden geçer. JWE ise simetrik anahtar ile şifrelenir. JWS ile Asimetrik anahtar ile imzalanır. JWT – JWE şeklinde ayrım görülebilir. Çünkü JWT genelde JWS’i kullanır.

JWT Token Yapısı

JWT Tokenlar 3 parçadan oluşuyor.

  1. HEADER:ALGORITHM & TOKEN TYPE

  2. PAYLOAD:DATA

  3. VERIFY SIGNATURE

Header

Header katmanı JWT Yapısının ilk katmanıdır. Json verisinin doğrudan BASE64 ile encode edilmesiyle oluşur. Algoritma ve Token tipini belirtir.

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

Base64: Encoding finished

****************************************
Input Data (ASCII): {"alg":"HS256","typ":"JWT"}
----------------------------------------
Encoded Data: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

Web oturumundaki kullanıcı bilgilerini sunucuya iletilmesi amacıyla genellikle kullanıcı bilgilerini içerir. Belli bir kıstası yoktur. istenilen bilgilerle oluşturulabilir.

{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}

Base64: Encoding finished

****************************************
Input Data (ASCII): {"sub":"1234567890","name":"John Doe","iat":1516239022}
----------------------------------------
Encoded Data: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ==

Signature

Yukarıdaki Header ve Payload kısmının = ifadeleri kalkıp araya . konulup birleştirilmesiyle oluşan datanın belirlenen yöntem ve key ile imzalanması işlemidir. Aynı key sunucu ya da başka bir serviste bulunur ve doğrulama işlemi gerçekleşir.

HMAC SHA-256: operation finished

****************************************
Key: hmac-keyim-budur
Data: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
----------------------------------------
HMAC: A8DAD792EAEF0AB89FC2176988398B7DD123B148B1242364C0EFF4B89ED50CA6
Base64: Encoding finished
****************************************
Input Data (HEXADECIMAL): A8DAD792EAEF0AB89FC2176988398B7DD123B148B1242364C0EFF4B89ED50CA6
----------------------------------------
Encoded Data: qNrXkurvCrifwhdpiDmLfdEjsUixJCNkwO/0uJ7VDKY=

Yeni oluşan JWT’imiz alttaki olacak ve APİ isteklerinde Bearer(Taşıyıcı) Başlangıcıyla header’da gönderilir

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.qNrXkurvCrifwhdpiDmLfdEjsUixJCNkwO_0uJ7VDKY

Kaynaklar:

jwt.io

crypto calculator