İçeriğe geç
BilgiKütüphanesi
Siber Güvenlik

JWT (JSON Web Token) Nedir? Durumsuz Kimlik Doğrulama

JWT (JSON Web Token), iki taraf arasında bilgiyi imzalı ve doğrulanabilir biçimde taşıyan açık bir standarttır (RFC 7519). Web'de durumsuz kimlik doğrulama için kullanılır: kimlik token'ın içine yazılır ve kriptografik olarak imzalanır. Kritik nokta: JWT imzalıdır ama şifreli değildir; payload herkes tarafından okunabilir.

İlk yayın: 2 dk okuma2 kaynak

JWT (JSON Web Token), iki taraf arasında bilgiyi güvenli ve doğrulanabilir biçimde taşımak için kullanılan, açık bir standarttır (RFC 7519). En yaygın kullanımı web uygulamalarında kimlik doğrulama ve yetkilendirmedir: Kullanıcı giriş yaptıktan sonra sunucu ona bir token verir, kullanıcı sonraki her isteğinde bu token'ı sunar ve sunucu kimliğini token'dan doğrular. JWT'nin öne çıkan özelliği, taşıdığı bilginin kendi içinde doğrulanabilir olmasıdır.

JWT neyi çözer? Durumsuz kimlik doğrulama

Geleneksel oturum yönetiminde sunucu, giriş yapan her kullanıcı için bellekte ya da veritabanında bir oturum kaydı tutar; kullanıcıya yalnızca bu kaydı işaret eden bir kimlik verilir. Bu yöntem çalışır ama sunucunun durum (state) tutmasını gerektirir — birden fazla sunucu olduğunda bu oturumları paylaşmak zorlaşır.

JWT farklı bir yol izler: Kullanıcının kimliği ve yetkileri doğrudan token'ın içine yazılır ve token kriptografik olarak imzalanır. Sunucunun herhangi bir oturum kaydı tutmasına gerek kalmaz; gelen token'ın imzasını doğrulaması yeterlidir. Bu durumsuz (stateless) yaklaşım, çok sayıda sunucuya ölçeklenen sistemlerde büyük kolaylık sağlar.

JWT'nin üç parçası

Bir JWT, nokta işaretiyle ayrılmış üç bölümden oluşur: header.payload.signature.

  • Header (başlık): Token'ın türünü ve imzalamada kullanılan algoritmayı belirtir.
  • Payload (yük): Asıl taşınan bilgi. "Claim" adı verilen alanlardan oluşur: Kullanıcı kimliği, yetkiler, token'ın son kullanma tarihi gibi. Bunlar isteyen herkes tarafından okunabilir.
  • Signature (imza): Header ve payload'ın, bir gizli anahtarla üretilmiş kriptografik imzası. Token'ın yolda değiştirilmediğini kanıtlayan parçadır.

İlk iki parça yalnızca Base64 ile kodlanmıştır — şifrelenmemiştir.

Kritik nokta: JWT imzalıdır, şifreli değildir

JWT hakkındaki en yaygın ve tehlikeli yanılgı budur. Standart bir JWT'nin payload'ı şifreli değildir; herkes token'ı çözüp içindeki bilgileri okuyabilir. İmza yalnızca içeriğin değiştirilmediğini garanti eder, gizli kaldığını değil. Bu yüzden:

  • Parola, kredi kartı numarası gibi hassas veriler asla JWT payload'ına konmamalıdır.
  • İmza doğrulaması her istekte mutlaka yapılmalıdır; doğrulanmayan bir token hiçbir güvence sağlamaz.

Nasıl çalışır? Tipik akış

  1. Kullanıcı kullanıcı adı ve parolasıyla giriş yapar.
  2. Sunucu bilgileri doğrular ve kullanıcının kimliğini içeren, imzalı bir JWT üretip gönderir.
  3. İstemci bu token'ı saklar ve sonraki isteklerde (genellikle Authorization başlığında) sunucuya yollar.
  4. Sunucu her istekte token'ın imzasını ve son kullanma tarihini doğrular; geçerliyse isteği kullanıcının kimliğiyle işler.

Güvenlik ve dikkat edilmesi gerekenler

  • Son kullanma süresi kısa tutulmalıdır. İmzalı bir token, süresi dolana kadar geçerlidir; durumsuz olduğu için tek bir token'ı anında iptal etmek zordur. Bu yüzden kısa ömürlü erişim token'ları ve ayrı bir yenileme (refresh) token'ı deseni yaygındır.
  • Gizli anahtar korunmalıdır. İmza anahtarı sızarsa, saldırgan geçerli token üretebilir.
  • Algoritma dikkatle seçilmelidir. Token'ın belirttiği algoritmaya körü körüne güvenmek (özellikle "imzasız" anlamına gelen none algoritması) klasik bir güvenlik açığı kaynağıdır; sunucu beklediği algoritmayı kendisi dayatmalıdır.

Nereden öğrenmeli?

JWT'nin resmi tanıtım kaynağı jwt.io'dur; burada bir token'ın üç parçasını canlı olarak çözüp inceleyebilir, yapısını somut biçimde görebilirsiniz. Standardın kendisi RFC 7519'da tanımlıdır ve claim'lerin resmi anlamlarını içerir. Pratikte çoğu dil ve çatı için olgun JWT kütüphaneleri vardır; doğru yaklaşım, imza doğrulamasını ve süre kontrolünü elle yazmak yerine bu denenmiş kütüphanelere bırakmaktır.

Benzer İçerikler