JWT token, modern web ve mobil uygulamalarda oturumsuz kimlik doğrulama ve yetkilendirme sağlayan popüler bir yöntemdir. Bu rehberde JWT'nin yapısı, avantajları, klasik oturumlarla farkları, güvenlik ipuçları ve en iyi kullanım alanları detaylı şekilde açıklanıyor.
JWT token, modern web uygulamalarında en popüler yetkilendirme yöntemlerinden biridir. JWT token özellikle API'lerde, mobil uygulamalarda ve mikroservis mimarili servislerde yaygın olarak kullanılır çünkü sunucuda oturum saklamadan kimlik doğrulama sağlar.
Önceden, sunucunun her kullanıcıyı (oturumlar yoluyla) hatırlaması gerekirdi. JWT token ile tüm bilgiler her istekte birlikte iletilir. Bu, sistemi daha hızlı, daha ölçeklenebilir ve dağıtık servisler için daha uygun hale getirir.
Bu makalede JWT token nedir, nasıl çalışır, yapısı nasıldır ve klasik oturumlardan farkı nedir, detaylıca inceleyeceğiz.
JWT token, kullanıcı hakkında bilgi saklayan ve sunucuda veri tutmadan kimlik doğrulama için kullanılan özel bir karakter dizisidir. JWT, "JSON Web Token" anlamına gelir.
Biraz daha basitleştirirsek, sisteme giriş yaptıktan sonra aldığınız "dijital geçiş kartı"dır. Sunucu, kullanıcıyı her seferinde veritabanından kontrol etmek yerine, sadece bu token'a bakıp kim olduğunuzu ve izinlerinizi anlar.
JWT, modern web ve mobil uygulamalarda, API'lerde şu gibi alanlarda kullanılır:
JWT'nin temel fikri: Tüm bilgiler token'ın içinde saklanır, sunucuda değil. Bu sayede sistem hızlı ve kolayca ölçeklenebilir olur.
Token genellikle noktalarla ayrılmış uzun bir karakter dizisi şeklindedir, örneğin:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Rastgele bir karakter dizisi gibi görünse de, içinde şu bilgiler yer alır:
Unutmayın: JWT verileri şifrelemez, sadece kodlar. Yani içeriği okunabilir, fakat imza bozulmadan değiştirilemez.
JWT, oturum saklamadan yetkilendirme sağladığı için popülerdir. Sunucu, kullanıcı durumu tutmaz; tüm bilgiler token'ın içindedir.
JWT token işleyişi, sunucunun bir defa token vermesi ve sonraki isteklere sadece bu token'ı kontrol etmesi (kullanıcı durumu saklamadan) üzerine kurulur.
Authorization: Bearer <token>
Sunucu, istekler arasında hiçbir kullanıcı bilgisi saklamaz. Gerekli tüm bilgiler token'ın içindedir. Bu nedenle JWT'ye stateless (durumsuz) yaklaşım denir.
JWT özellikle şu durumlar için idealdir:
JWT genellikle OAuth ile birlikte de kullanılır. Detaylar için OAuth 2.0 nasıl çalışır? Şifre olmadan giriş ve veri güvenliği başlıklı yazımıza göz atabilirsiniz.
Bir JWT token üç parçadan oluşur ve noktalarla ayrılır:
header.payload.signature
Her parça Base64 ile kodlanır, bu yüzden dışarıdan anlamsız bir karakter dizisi gibi görünür, ama içeriği okunabilir yapıdadır.
Token tipi ve imza algoritması bilgisini içerir.
{
"alg": "HS256",
"typ": "JWT"
}
Token'ın ana bölümüdür; kullanıcı bilgileri burada saklanır.
{
"userId": 123,
"role": "admin",
"exp": 1712345678
}
Not: Payload şifreli değildir, sadece kodlanmıştır. Yani herkes içeriği okuyabilir.
Token'ın en önemli bölümüdür, sahteciliğe karşı korur.
Birisi token içeriğini değiştirmeye çalışırsa, imza geçersiz olur ve sunucu isteği reddeder.
Sonuç olarak JWT, sadece bir karakter dizisi değil; veriyi ve güvenliği kendi içinde barındıran bağımsız bir kapsayıcıdır. Sunucu, kiminle konuştuğunu anlamak için veritabanına başvurmaz; tüm bilgiler token'da mevcuttur.
JWT kullanırken genellikle iki terim karıştırılır: kimlik doğrulama ve yetkilendirme. Bunlar ilişkili ama farklı işlemlerdir.
Kullanıcının kim olduğunu doğrulama sürecidir. Sistem "Sen kimsin?" sorusunu yanıtlar.
Genellikle bu aşamada JWT token oluşturulur.
Yetkilendirme bir sonraki adımdır. Sistem, "Ne yapabilirsin?" sorusuna cevap verir. Örneğin:
Bu bilgiler genellikle JWT token'ın payload bölümünde (ör: role alanı) saklanır.
Yani JWT hem kimlik doğrulama sonucunu saklar hem de erişim haklarını içerir.
Önemli: JWT, kendi başına kimlik doğrulama yapmaz; sadece doğrulamanın sonucunu taşır.
JWT'nin değerini anlamak için klasik oturum (session) yaklaşımıyla karşılaştırmak gerekir.
Yani sunucu kullanıcı durumunu saklar.
Sunucu veritabanına bakmaz, token'ı kontrol eder.
Sonuç: JWT, esneklik ve ölçeklenebilirlik için; oturumlar ise kontrol ve yönetim kolaylığı için uygundur.
Gerçek uygulamalarda, JWT genellikle tek başına kullanılmaz. Bunun yerine, iki token'lı bir yapı tercih edilir: access token ve refresh token.
Bu, güvenlik ile kullanım kolaylığı arasındaki dengeyi sağlar.
Çalınırsa, saldırgan sadece kısa süreli erişim elde edebilir.
Neden sadece bir JWT kullanılamaz? Eğer token uzun ömürlü olursa kullanışlıdır, ancak sızıntı riski büyüktür. Kısa olursa güvenlidir, ama kullanıcı sık sık çıkış yapar. İkili yapı (access + refresh token) bu dengeyi kurar.
Bu yaklaşım neredeyse tüm modern yetkilendirme sistemlerinde kullanılır.
JWT güvenli bir mekanizmadır, ancak doğru kullanılırsa. Yanlış uygulamalar ciddi güvenlik açıklarına yol açar.
JWT'nin ana koruması imza (signature)dır. Sunucu, token'ı gizli anahtarıyla imzalar ve istemci bu anahtarı bilmez. Her istekte sunucu imzayı yeniden hesaplar ve karşılaştırır; veri değiştirilirse imza uyuşmaz ve erişim reddedilir.
JWT tahmin edilemez, fakat çalınabilir. Bir saldırgan token'ı ele geçirirse, kullanıcı adına istek gönderebilir, verilere erişebilir ve sunucu bunu ayırt edemez.
JWT güçlü bir araçtır, fakat her proje için en iyi çözüm değildir. Gerçek avantaj sağlayacağı alanları iyi belirlemek gerekir.
JWT burada idealdir çünkü:
JWT, cihazda saklanıp her istekte gönderilebilir.
JWT, durum saklamadan kolayca kimlik kontrolü sağlar.
Bu senaryolarda genellikle OAuth ile birlikte JWT kullanılır. Daha fazla bilgi için OAuth 2.0 nedir? Güvenli giriş ve veri koruması başlıklı yazımıza bakabilirsiniz.
JWT ölçeklenebilir sistemler, API'ler ve frontend uygulamaları için bir araçtır. Ancak her proje için uygun değildir; her zaman en iyi çözüm olmayabilir.
JWT token, sunucuda oturum saklamadan kimlik doğrulama ve yetkilendirme sağlayan modern bir yöntemdir. Tüm gerekli bilgileri kendi içinde taşır ve imza ile doğrulanır - bu da sistemi hızlı ve ölçeklenebilir yapar.
Bu yazıda şunları inceledik:
Pratikte, JWT API'ler, mobil uygulamalar ve mikroservisler için müthiş bir çözümdür; ancak basit projelerde gereksiz olabilir.
Kısacası: JWT kolaylık ve ölçeklenebilirlik, oturumlar ise kontrol ve yönetim kolaylığı sunar. Seçim, ihtiyaçlarınıza, mimarinize ve güvenlik gereksinimlerinize bağlıdır.