OAuth 2.0 ve JWT Arasındaki Fark Nedir?

Yazar: Ahmet YılmazYayın: 28 Ağu 2026Güncelleme: 11 Eyl 202615 dk Okuma

OAuth 2.0 bir yetkilendirme protokolü, JWT ise bu süreçte kullanılan standart bir veri taşıma formatıdır. Sistemler bu iki yapıyı birlikte kullanarak güvenli erişim sağlar.

OAuth 2.0 ve JWT Arasındaki Fark Nedir? için öne çıkan görsel
OAuth 2.0 ve JWT Arasındaki Fark Nedir? için öne çıkan görsel

Yazılım mimarilerinin dağıtık yapılara, mikroservislere ve çoklu bulut entegrasyonlarına evrilmesiyle birlikte, sistemler arası güvenli veri iletimi ve erişim kontrolü kurumsal işletmeler için temel bir gereksinim haline gelmiştir. Bu ekosistemde en sık karıştırılan iki kavram olan OAuth 2.0 ve JSON Web Token (JWT), aslında teknik olarak tamamen farklı kategorilerde konumlanır. Geliştiriciler ve teknik karar vericiler tarafından sıklıkla birbiriyle kıyaslanan bu iki teknoloji, esasen birbirinin alternatifi veya rakibi değil, güvenli bir kurumsal kimlik ve yetkilendirme mimarisini birlikte inşa eden tamamlayıcı bileşenlerdir. Bu teknik rehberde, OAuth 2.0 ve JWT Arasındaki Fark Nedir? sorusunun cevabını teorik altyapı, pratik kullanım senaryoları, güvenlik riskleri ve kurumsal mimari kararları çerçevesinde detaylıca analiz edeceğiz.

Temel Yanılgı: OAuth 2.0 ve JWT Neden Kıyaslanamaz?

OAuth 2.0'ın Protokol Rolü

OAuth 2.0, en yalın tanımıyla bir yetkilendirme (authorization) çerçevesidir (framework). Internet Mühendisliği Görev Gücü (IETF) tarafından RFC 6749 standart belgesiyle tanımlanan bu protokol, bir uygulamanın kullanıcı şifresini doğrudan paylaşmadan, başka bir uygulama üzerindeki kaynaklara sınırlı erişim sağlamasına olanak tanır. OAuth 2.0, verinin ağ üzerinde hangi biçimde veya formatta taşınacağını kendisi dikte etmez. Bunun yerine tarafların (Kullanıcı, İstemci Uygulama, Yetkilendirme Sunucusu ve Kaynak Sunucusu) birbirleriyle nasıl etkileşime gireceğini, hangi onay süreçlerinden (flows) geçileceğini ve erişim hakkının nasıl devredileceğini belirleyen kurallar setini tanımlar.

Protokolün odaklandığı ana husus, güvenlik politikalarının ve iş akışlarının standartlaştırılmasıdır. Kurumsal bir yapıda OAuth 2.0 kullanımı, farklı departmanların, iş ortaklarının veya üçüncü taraf entegrasyonların sistem kaynaklarına sızmasını veya yetkisiz erişim sağlamasını engellemek adına yapısal kurallar zinciri sunar. Bu kurallar zinciri, erişim izinlerinin (scopes) dinamik olarak yönetilmesine ve kullanıcıların şifrelerini üçüncü taraf yazılımlara teslim etmek zorunda kalmadan sistemleri entegre edebilmelerine zemin hazırlar.

JWT'nin Veri Taşıma Mekanizması

JSON Web Token (JWT) ise, IETF bünyesinde RFC 7519 standardı ile kayıt altına alınmış bağımsız bir açık veri formatıdır. İki taraf arasında iddiaların (claims) kompakt, bağımsız (self-contained) ve güvenli bir şekilde JSON nesnesi olarak aktarılmasını sağlar. JWT, bir yetkilendirme akışı veya onay mekanizması sunmaz. Görevi, kendisine verilen bir veri paketini (örneğin kullanıcı kimlik bilgileri, yetki seviyeleri, abonelik durumları) alıp, bu paketin yolda bozulmadığını veya manipüle edilmediğini garanti edecek şekilde kriptografik olarak imzalamak ve alıcı tarafa iletmektir.

JWT yapısının en belirgin özelliği stateless (durumsuz) olmasıdır. Bir kez üretildikten sonra, alıcı sunucu bu token'ın doğruluğunu kontrol etmek için her seferinde merkezi bir veri tabanına veya yetki sunucusuna sorgu göndermek zorunda kalmaz. Token'ın kendi içindeki imza alanı, verinin doğruluğunu ve bütünlüğünü kanıtlamak için yeterlidir. Bu durum, JWT'yi yüksek trafikli mikroservis mimarileri ve dağıtık sistemler için ideal bir veri taşıma aracı haline getirir.

Alternatif Değil, Tamamlayıcı Yapılar

Yazılım dünyasındaki yaygın kafa karışıklığı, "Yetkilendirme için OAuth 2.0 mı kullanmalıyım yoksa JWT mi?" sorusundan kaynaklanır. Bu soru, "Kargo taşımak için karayolu ağını mı (otoyol kurallarını) kullanmalıyım yoksa mukavva kutuları mı?" sorusuna benzer. OAuth 2.0, kargonun teslimat rotasını, hangi kapılardan geçeceğini, kimlik kontrolünün nasıl yapılacağını belirleyen otoyol sistemidir; JWT ise o otoyoldan geçen, içindeki yükü koruyan, mühürlü mukavva kutudur.

Sistem tasarımlarında bu iki yapı çoğunlukla birlikte kullanılır. OAuth 2.0 protokolünün tanımladığı süreçlerin sonucunda istemciye bir "Access Token" (Erişim Belirteci) verilir. Bu belirtecin yapısı rastgele karakterlerden oluşan anlamsız bir metin (opaque token) olabileceği gibi, kendi içinde yapılandırılmış veri taşıyan bir JWT de olabilir. Dolayısıyla, OAuth 2.0 protokolünün ürettiği ve taşıdığı yetki belgesinin modern sistemlerdeki en popüler formatı JWT'dir.

OAuth 2.0: Modern Yetkilendirme Çerçevesi

OAuth 2.0 Kurumsal Mimaride Hangi Sorunu Çözer?

Geleneksel web mimarilerinde bir uygulamanın diğer bir uygulama üzerindeki verilere erişebilmesi için kullanıcı şifresinin doğrudan paylaşılması gerekiyordu. Örneğin, bir insan kaynakları (İK) yazılımının çalışanın takvim verilerine erişebilmesi için kullanıcının e-posta şifresini İK yazılımına girmesi isteniyordu. Bu durum, siber güvenlik açısından kabul edilemez bir zafiyet doğurmaktaydı. Şifrenin üçüncü şahısların eline geçmesi, kullanıcının tüm hesabının ele geçirilmesi riskini taşıyor ve yetkilerin sınırlandırılmasını (örneğin sadece takvimi görsün ama e-postaları okuyamasın) imkansız kılıyordu.

OAuth 2.0, bu problemi kökten çözerek "yetki devri" (delegated authorization) modelini getirmiştir. Artık istemci uygulamalar kullanıcının şifresini asla görmez. Bunun yerine, kullanıcıyı güvenli bir kimlik sağlayıcıya (Identity Provider) yönlendirir. Kullanıcı orada kimliğini doğrular ve istemcinin talep ettiği izinleri (scopes) onaylar. Bu onayın ardından istemciye sadece o izinlerle sınırlı, belirli bir süre geçerli bir erişim anahtarı teslim edilir.

Yetki Devri Mekanizması

Protokolün yetki devri mekanizması, işletmelerin iç ve dış entegrasyonlarında güvenlik sınırlarını net bir şekilde çizmesini sağlar. Bu mimari sayesinde, bir e-ticaret platformu ödeme altyapısına erişirken veya bir mobil uygulama bulut depolama servisinden dosya çekerken sadece ihtiyaç duyduğu asgari haklara sahip olur. Bu durum, siber güvenlik dünyasındaki "en az ayrıcalık ilkesi" (principle of least privilege) ile doğrudan örtüşür.

OAuth 2.0 kapsamında yetki devri sürecinin güvenle yürütülmesi için farklı senaryolara özel "akışlar" (grant types) tasarlanmıştır:

  • Authorization Code Flow: Web uygulamaları gibi kaynak kodunu ve istemci sırrını (client secret) sunucu tarafında güvenle saklayabilen yapılar için standart akıştır.

  • Authorization Code with PKCE (Proof Key for Code Exchange): Tek sayfalık web uygulamaları (SPA) ve mobil uygulamalar gibi kaynak kodunun dışarıdan okunabildiği güvensiz ortamlarda, istemci sırrı kullanmadan güvenli erişim sağlamak için geliştirilmiş güncel standarttır.

  • Client Credentials Flow: Kullanıcı etkileşimi olmadan, arka planda iki sunucunun veya mikroservisin birbiriyle doğrudan haberleştiği (machine-to-machine) senaryolar için kullanılır.

Kimlik Sağlayıcılar ve Kaynak Sahipleri

OAuth 2.0 mimarisinin sağlıklı çalışabilmesi için rollerin kesin bir şekilde dağıtılması gerekir. Protokol, sistemi yönetilebilir kılmak amacıyla dört temel aktör tanımlar:

  1. Kaynak Sahibi (Resource Owner): Verilerin asıl sahibi olan son kullanıcıdır. İstemci uygulamanın kendi adına hangi verilere erişebileceğini kontrol eder ve onaylar.

  2. İstemci (Client): Kullanıcının verilerine erişmek isteyen uygulamadır. Bu bir web sitesi, mobil uygulama veya başka bir arka plan servisi olabilir.

  3. Yetkilendirme Sunucusu (Authorization Server): Kullanıcının kimliğini doğrulayan, izin onaylarını alan ve başarılı süreçlerin sonunda istemciye erişim belirteçlerini (Access Token) dağıtan merkezi motordur. Kurumsal yapılarda Keycloak, Okta, Auth0 veya AWS Cognito gibi sistemler bu görevi üstlenir.

  4. Kaynak Sunucusu (Resource Server): Korunan kullanıcı verilerini barındıran ve gelen isteklerdeki erişim belirteçlerini doğrulayarak veriyi sunan API servisidir.

JWT (JSON Web Token): Standartlaştırılmış Veri Taşıma Formatı

JWT'nin Yapıtaşları: Header, Payload ve Signature

JSON Web Token (JWT), görsel olarak noktalarla (.) ayrılmış üç farklı Base64URL karakter dizisinden oluşur. Bu üç parça sırasıyla Header (Başlık), Payload (Gövde) ve Signature (İmza) alanlarını temsil eder. Yapı şu şekildedir: header.payload.signature.

  • Header (Başlık): Token hakkındaki meta verileri içerir. Genellikle kullanılan token türünü (JWT) ve imzalamada tercih edilen şifreleme algoritmasını (örneğin HMAC SHA256 veya RSA) belirten basit bir JSON nesnesidir.

    {
      "alg": "RS256",
      "typ": "JWT"
    }
  • Payload (Gövde): Taşınmak istenen asıl verilerin (claims/iddialar) yer aldığı bölümdür. Üç tür claim barındırabilir: kayıtlı (registered - iss, sub, exp gibi standart alanlar), halka açık (public) ve özel (private - kurumsal uygulamanıza özel tanımladığınız alanlar).

    {
      "sub": "usr_123456789",
      "name": "Ahmet Yılmaz",
      "role": "enterprise_admin",
      "exp": 1793232000
    }
  • Signature (İmza): Token'ın yolda değiştirilmediğini doğrulamak için kullanılır. Kodlanmış Header ve Payload alanları birleştirilip, Header'da belirtilen algoritma ve sunucu tarafında saklanan gizli bir anahtar (secret key/private key) yardımıyla imzalanır.

JWT Neden ve Nerede Kullanılır?

JWT'nin modern sistem tasarımlarındaki popülaritesinin arkasında, durum bilgisi saklamayan (stateless) yapısı ve yüksek taşınabilirliği yatar. Geleneksel oturum yönetiminde (session management), sunucu her gelen istekte kullanıcının aktif olup olmadığını doğrulamak için oturum kimliğini (session ID) kendi bellek alanında (RAM) veya bir veri tabanında (Redis, PostgreSQL vb.) sorgulamak zorundaydı. Bu durum, milyonlarca eş zamanlı kullanıcısı olan sistemlerde ciddi bir veri tabanı yükü ve sunucular arası senkronizasyon problemi yaratır.

JWT kullanıldığında ise oturum bilgisi sunucuda değil, istemci tarafında (tarayıcı veya mobil cihaz) saklanır. Sunucuya bir istek geldiğinde, sunucu sadece token imzasını elindeki genel anahtarla (public key) matematiksel olarak doğrular. İmza geçerliyse, gövde (payload) içindeki verilerin doğru olduğunu kabul eder ve veri tabanına hiçbir sorgu atmadan isteği işleme koyar. Bu yaklaşım, mikroservislerin bağımsız olarak ölçeklenebilmesini ve RESTful API güvenliğinin en az kaynak tüketimiyle sağlanmasını mümkün kılar.

İmzalı Token Mekanizması

JWT konusunda en sık yapılan hatalardan biri, "imzalı" (signed) kavramı ile "şifrelenmiş" (encrypted) kavramlarının karıştırılmasıdır. Standart bir JWT (JWS - JSON Web Signature), şifrelenmiş bir veri paketi değildir. Sadece Base64URL algoritmasıyla kodlanmıştır. Base64URL, bir şifreleme yöntemi değil, verinin HTTP protokolü üzerinden güvenle taşınmasını sağlayan bir kodlama biçimidir. Dolayısıyla, ağ trafiğini dinleyen herhangi bir kişi veya istemci tarafındaki kötü niyetli bir yazılım, elindeki JWT'yi kolayca deşifre edip içeriğini (kullanıcı adı, e-posta adresi, yetkileri) düz metin olarak okuyabilir.

Buradaki güvenlik güvencesi gizlilik değil, bütünlüktür (integrity). Eğer bir saldırgan token'ın payload kısmındaki role değerini admin olarak değiştirmeye çalışırsa, bu değişiklik imza (signature) alanıyla uyuşmayacaktır. Sunucu, kendi gizli anahtarıyla imza kontrolü yaptığında imzanın geçersiz olduğunu fark edecek ve isteği anında reddedecektir. Bu nedenle, JWT içerisinde kullanıcı şifresi, kredi kartı numarası, kişisel sağlık verileri gibi dışarıya sızması sakıncalı olan kritik ve gizli bilgilerin barındırılmaması, sadece sistemin çalışması için gereken asgari referans verilerin taşınması siber güvenlik disiplini açısından şarttır.

Kritik Analiz: OAuth 2.0 ve JWT Arasındaki Temel Farklar

Kullanım Amacı ve İşlevsellik

OAuth 2.0 ve JWT arasındaki en temel fark, odaklandıkları mühendislik problemidir. OAuth 2.0, bir mimarideki aktörlerin birbirleriyle nasıl el sıkışacağını (handshake), hangi izin sınırlarında hareket edeceğini ve bir istemciye ne zaman, nasıl güvenileceğini tanımlayan kapsamlı bir iş akışı metodolojisidir. Süreç yönetimini üstlenir; kullanıcı onay ekranlarını, token yenileme (refresh token) mekanizmalarını ve dış entegrasyon politikalarını organize eder.

JWT ise sadece bir veri paketleme standardıdır. Görevi, kendisine teslim edilen bilgileri güvenli bir biçimde mühürlemekten ibarettir. JWT'nin onay ekranlarından, kullanıcı yönlendirmelerinden veya istemci güvenilirliğinden haberi yoktur. Kendi başına bir akış üretemez; sadece kendisine sunulan verileri paketler ve imza katmanıyla koruma altına alır.

Uygulama ve Mimari Katman

Mimari düzeyde incelendiğinde, OAuth 2.0 sistem genelini kapsayan bir orkestrasyon katmanıdır. Birden fazla sunucunun, ağ geçidinin (API Gateway) ve istemci uygulamanın dahil olduğu bir protokol ekosistemidir. Kurulumu, yönetimi ve bakımı kurumsal düzeyde bir altyapı yatırımı ve uzmanlık gerektirir.

JWT ise veri temsil (data representation) katmanında yer alır. Bir kütüphane yardımıyla herhangi bir programlama dilinde saniyeler içinde üretilebilir (sign) ve çözülebilir (verify). Sunucu altyapısında büyük değişiklikler gerektirmez. Tek bir mikroservis bile kendi içinde geçici veri transferleri veya basit kullanıcı oturumları için harici bir altyapıya ihtiyaç duymadan JWT kullanabilir.

Durum Yönetimi (Stateful vs. Stateless)

Geleneksel erişim belirteçleri (opaque tokens) genellikle rastgele üretilmiş karakter dizileridir ve sunucu tarafında durum bilgisinin saklanmasını (stateful) gerektirir. İstemci bu token'ı sunduğunda, sunucu veri tabanına giderek "Bu rastgele kod hangi kullanıcıya ait, yetkileri neler ve hala geçerli mi?" sorularının yanıtını arar. OAuth 2.0 bu yapıyı varsayılan olarak destekler.

Buna karşın JWT, stateless (durumsuz) mimarinin simgesidir. Token kendi başına tüm durumu (kullanıcı kimliği, rolleri, yetki süreleri) içinde taşır. Doğrulama yapmak için veri tabanına veya yetkilendirme sunucusuna gitme zorunluluğunu ortadan kaldırarak ağ gecikmesini (latency) minimize eder ve sistemin yatayda neredeyse sınırsız ölçeklenebilmesinin önünü açar. Ancak bu durumsuz yapı, token'ın iptal edilmesi gerektiği anlarda ciddi bir yönetim zorluğunu da beraberinde getirir.

KARŞILAŞTIRMA TABLOSU

Karşılaştırma Tablosu

OAuth 2.0 protokolü ile JWT veri formatı arasındaki temel yapısal farkların özet değerlendirmesi.

Kriter
Avantajlar
Dezavantajlar
01 Temel Tanım ve Rol
OAuth 2.0, istemcilerin belirli kaynaklara erişimini düzenleyen kurallar ve akışlar bütünüdür.
JWT, taraflar arasında veri taşımak için kullanılan kompakt ve kendi kendine yeten bir formattır.
02 Veri Saklama ve Durum (State)
OAuth 2.0 hem stateful (veri tabanı onaylı) hem de stateless token modellerini destekler.
JWT tamamen stateless çalışır; doğrulanması için sunucu tarafında veri tabanı sorgusu gerekmez.
03 Güvenlik ve İptal (Revocation)
Protokol düzeyinde yetki iptali (token revocation) RFC 7009 standardı ile kolayca yönetilir.
JWT'ler süresi dolana kadar geçerlidir; anlık olarak iptal edilmeleri ek mimari çözümler gerektirir.
01

Temel Tanım ve Rol

Avantaj

OAuth 2.0, istemcilerin belirli kaynaklara erişimini düzenleyen kurallar ve akışlar bütünüdür.

Dezavantaj

JWT, taraflar arasında veri taşımak için kullanılan kompakt ve kendi kendine yeten bir formattır.

02

Veri Saklama ve Durum (State)

Avantaj

OAuth 2.0 hem stateful (veri tabanı onaylı) hem de stateless token modellerini destekler.

Dezavantaj

JWT tamamen stateless çalışır; doğrulanması için sunucu tarafında veri tabanı sorgusu gerekmez.

03

Güvenlik ve İptal (Revocation)

Avantaj

Protokol düzeyinde yetki iptali (token revocation) RFC 7009 standardı ile kolayca yönetilir.

Dezavantaj

JWT'ler süresi dolana kadar geçerlidir; anlık olarak iptal edilmeleri ek mimari çözümler gerektirir.

Birlikte Kullanım: Güvenli ve Ölçeklenebilir API Mimarisi

OAuth 2.0'da Access Token Olarak JWT Kullanımı

Modern ve büyük ölçekli kurumsal mimarilerde OAuth 2.0 ve JWT güçlerini birleştirerek endüstri standardı bir güvenli erişim modeli sunar. Bu modelde, kullanıcı kimlik doğrulama sürecini başlattığında OAuth 2.0 akışları tetiklenir. Kullanıcı başarıyla doğrulandıktan sonra, Yetkilendirme Sunucusu istemciye teslim edilmek üzere bir Access Token üretir. Bu token, JWT formatında yapılandırılır.

İstemci uygulama, kendisine teslim edilen bu JWT'yi sonraki her API isteğinde HTTP istek başlığına (Authorization Header) Bearer <Token> formatında ekler. Bu sayede, OAuth 2.0'ın güvenli yetki devri politikaları işletilirken, JWT'nin stateless ve hızlı doğrulama yeteneklerinden sonuna kadar faydalanılmış olur. API sunucuları, merkezi sunucuya yük bindirmeden gelen istekleri anında doğrulayabilir.

Entegre Güvenlik Senaryoları

Bu iki yapının birlikte kullanıldığı en popüler senaryolardan biri, API Gateway mimarisidir. Şirketin dış dünyaya açılan tek kapısı olan API Gateway, gelen tüm istekleri karşılar. İstekteki JWT'nin imzasını kontrol eder, geçerlilik süresine bakar ve yetersiz yetkilere sahip istekleri daha iç sistemlere ulaşmadan en dış sınırda engeller.

Eğer token geçerliyse, API Gateway bu JWT'yi çözümleyerek içindeki claims (kullanıcı kimliği, departman, roller) bilgilerini alır ve arka plandaki mikroservislere (Ödeme Servisi, Stok Servisi vb.) güvenli iç ağ üzerinden iletir. Böylece iç ağdaki mikroservisler karmaşık güvenlik kontrolleriyle uğraşmaz, doğrudan iş mantığına (business logic) odaklanabilir. Bu yapı, hem siber güvenlik denetimlerini kolaylaştırır hem de mikroservislerin geliştirme süreçlerini hızlandırır.

Token Akışları ve JWT'nin Yeri

Bir kullanıcının sisteme giriş yapmasından veriye erişmesine kadar geçen entegre süreç şu operasyonel adımlarla gerçekleşir:

  1. Talep ve Yönlendirme: İstemci uygulama, kullanıcıyı OAuth 2.0 akışıyla Yetkilendirme Sunucusuna (örneğin Keycloak) yönlendirir. İstemci bu esnada hangi izinleri (scopes) istediğini belirtir.

  2. Onay ve Üretim: Kullanıcı giriş yapar ve izinleri onaylar. Yetkilendirme sunucusu, asimetrik şifreleme yöntemlerinden biri olan RS256 algoritmasını ve kendi özel anahtarını (private key) kullanarak bir JWT (Access Token) imzalar ve istemciye teslim eder.

  3. İstek Gönderimi: İstemci, elde ettiği JWT'yi korunan kaynak sunucusundaki (Resource Server) RESTful API uç noktasına gönderir.

  4. Lokal Doğrulama: Kaynak Sunucusu, JWT imzasını doğrulamak için yetkilendirme sunucusunun yayınladığı genel anahtarı (public key) kullanır. İmza geçerliyse, veri tabanına gitmeksizin JWT içerisindeki kullanıcı kimliği ve yetki bilgilerine dayanarak verileri istemciye sunar.

Güvenlik ve Risk Yönetimi: Kurumsal Uyarılar

JWT İptal (Revocation) Zorlukları

JWT'nin en büyük gücü olan stateless (durumsuz) yapısı, siber güvenlik tarafındaki en zayıf noktasını oluşturur. Bir kez imzalanıp istemciye teslim edilen bir JWT, kendi gövdesinde yazan son kullanma tarihine (exp) kadar teknik olarak geçerlidir. Eğer bir kullanıcı hesabını kapatırsa, şifresini değiştirirse veya daha da kritik olan senaryoda, bir saldırgan Token hijacking (token çalınması) saldırısı ile kullanıcının aktif JWT'sini ele geçirirse, bu durum sunucu tarafında anında tespit edilip engellenemez. Sunucu, imza geçerli olduğu sürece gelen istekleri onaylamaya devam eder.

Bu teknik riski minimize etmek için kurumsal mimarilerde şu stratejiler uygulanmalıdır:

  • Kısa Ömürlü Belirteçler (Short-lived Tokens): Erişim belirteçlerinin (Access Token) ömrü çok kısa (örneğin 5 ila 15 dakika) tutulmalıdır. Token süresi bittiğinde, istemci arka planda Refresh Token kullanarak kullanıcıya hissettirmeden yeni bir Access Token talep eder.

  • Token İptal Listesi (Denylist/Revocation List): İptal edilen veya çalındığı bildirilen JWT'lerin benzersiz kimlik numaraları (jti claim'i), Redis gibi son derece hızlı çalışan bir bellek içi veri tabanında saklanır. API sunucuları, imza doğrulamasından hemen sonra bu listeyi kontrol eder. Bu yöntem stateless yapıyı biraz bozsa da siber güvenlik için kritik bir koruma kalkanıdır.

Access ve Refresh Token Zafiyetleri

Token'ların istemci tarafında nerede saklandığı, uygulamanın siber saldırılara karşı dayanıklılığını belirler. Web tarayıcılarında JWT'lerin localStorage veya sessionStorage alanlarında saklanması yaygın bir geliştirici hatasıdır. Bu alanlar Javascript kodlarına tamamen açıktır ve olası bir Siteler Arası Betik Çalıştırma (XSS) zafiyetinde token'ların tamamının çalınmasıyla sonuçlanır.

Güvenli saklama için, JWT'lerin tarayıcı tarafında mutlaka Javascript tarafından erişilemeyen, sadece sunucuya otomatik olarak gönderilen HttpOnly, Secure ve SameSite=Strict özelliklerine sahip güvenli çerezlerde (cookies) tutulması gerekir. Ayrıca, daha uzun ömürlü olan Refresh Token'ların çalınması riskine karşı Refresh Token Rotation (Her kullanımda eski refresh token'ı iptal edip yenisini üretme) mekanizması entegre edilmelidir. Bu sayede, çalınan bir refresh token sömürülmeye çalışıldığında sistem bunu fark ederek o kullanıcıya ait tüm aktif oturumları anında sonlandırabilir.

Kimlik Doğrulama Yanılgısı (OIDC İhtiyacı)

Bir diğer hayati yanılgı, OAuth 2.0 protokolünü bir kimlik doğrulama (Authentication) aracı olarak kullanmaya çalışmaktır. OAuth 2.0 tasarımsal olarak yalnızca yetkilendirme için üretilmiştir. Bir istemciye "bu kullanıcı adına şu verileri okuyabilirsin" der ancak "bu kullanıcının gerçek adı Ahmet'tir, e-postası şudur" gibi kimlik doğrulamasına dair kesin ve güvenli bir bilgi sunmaz. Geliştiriciler bu ayrımı kaçırdığında, yetki sömürüsü ve kimlik taklidi gibi kritik zafiyetler ortaya çıkar.

Kimlik doğrulamayı güvenli bir standartta çözmek için OAuth 2.0 protokolünün üzerine inşa edilen OpenID Connect (OIDC) katmanı kullanılmalıdır. OIDC, standart yetkilendirme akışlarına ek olarak bir de ID Token kavramını getirir. ID Token, her zaman JWT formatındadır ve kullanıcının gerçek kimlik bilgilerini, ne zaman giriş yaptığını ve kimlik doğrulama yöntemini taşıyan doğrulanabilir bir pasaport görevi görür.

ARTILAR & EKSİLER

Artılar ve Eksiler

Stateless JWT kullanımının kurumsal sistemlerdeki avantajları ve siber güvenlik riskleri.

Artılar

2 avantaj

Ölçeklenebilirlik (Stateless)

Sunucu tarafında oturum bilgisi saklanmadığı için yatayda sınırsız büyüme imkanı sunar.

Performans

Veri tabanına gitmeden, sadece kriptografik imza kontrolüyle hızlı doğrulama sağlar.

!

Eksiler

2 dikkat noktası

!

Anlık İptal Zorluğu

Çalınan bir token, geçerlilik süresi (exp) bitene kadar pasifize edilemez.

!

Boyut ve Ağ Yükü

İçerdiği zengin iddialar (claims) nedeniyle HTTP başlıklarında ek bant genişliği tüketir.

Kurumsal Mimari İçin En İyi Pratikler ve Seçim Yol Haritası

Özetle Temel Çıkarımlar

Kurumsal bir yazılım projesinde güvenlik mimarisini kurgularken OAuth 2.0 ve JWT teknolojilerinin her birinin yerini ve sorumluluğunu doğru tayin etmek gerekir. Birbirlerinin alternatifi olmayan bu iki yapı, modern sıfır güven (Zero Trust) mimarilerinin hayata geçirilmesinde kritik birer tuğla görevi üstlenir. OAuth 2.0, kurumsal ekosistemin güvenli iş akışlarını, politikalarını ve onay mekanizmalarını standartlaştırırken; JWT ise bu standartların ürettiği yetki verilerinin servisler arasında en hızlı, en hafif ve manipülasyona kapalı biçimde taşınmasını sağlar.

Şirketinizin büyüklüğü, entegre olacağınız üçüncü taraf sistemlerin yoğunluğu ve siber güvenlik uyumluluk (KVKK, GDPR, PCI-DSS) gereksinimleriniz, bu teknolojilerin nasıl konumlandırılacağını belirleyen ana unsurlardır. Yalnızca şirket içi küçük bir monolitik uygulamayı yönetiyorsanız karmaşık OAuth 2.0 akışlarına girmeden basit JWT tabanlı oturum yönetimi yeterli olabilir. Ancak iş ortaklarıyla veri paylaşımı yapan, mobil uygulamaları olan ve mikroservis kullanan geniş ölçekli yapılarda OAuth 2.0 mimarisini kurmak kaçınılmaz bir zorunluluktur.

Güvenlik Odaklı Mimari Tavsiyeleri

Kurumsal sistemlerde sürdürülebilir bir API güvenliği elde etmek adına aşağıdaki teknik pratiklerin uygulanması elzemdir:

  1. Şifreleme Algoritmalarını Doğru Seçin: Paylaşılan gizli anahtar riskini ortadan kaldırmak için asimetrik şifreleme algoritmalarını (RS256 veya ES256) tercih edin. Böylece API sunucularınız sadece genel anahtara (public key) sahip olur ve imzalama yetkisi veren özel anahtar (private key) yalnızca yetkilendirme sunucusunda saklı kalır.

  2. Transport Layer Security (TLS): Tüm ağ trafiğini istisnasız HTTPS üzerinden yürüterek Man-in-the-middle attacks (ortadaki adam) saldırılarını ve token'ların ağ üzerinden düz metin olarak dinlenmesini engelleyin.

  3. Hassas Verileri Payload İçinde Tutmayın: JWT'lerin kolayca deşifre edilebildiğini unutmayın. Eğer token içinde hassas bir veri iletmek zorundaysanız standart JWS yerine veriyi şifreleyen JWE (JSON Web Encryption) standardını kullanın.

  4. Kapsam Sınırlandırması (Scope Management): OAuth 2.0 istemcilerine verilen yetkileri (scopes) mümkün olan en dar çerçevede tanımlayın. Örneğin, bir raporlama aracına sadece okuma (read) yetkisi verin, yazma (write) veya silme (delete) yetkilerini kesinlikle sınırlandırın.

Gelecek Trendler ve Gelişmeler

Erişim kontrolü ve kimlik doğrulama dünyası statik değildir. Güvenlik tehditlerinin karmaşıklaşması, standartların da güncellenmesini beraberinde getirmektedir. Bu kapsamda öne çıkan en önemli gelişmelerden biri OAuth 2.1 taslak çalışmalarıdır. OAuth 2.1, geçmişteki en iyi siber güvenlik pratiklerini tek bir çatı altında birleştirerek güvensiz kabul edilen bazı eski akışları (Implicit Grant gibi) tamamen tedavülden kaldıracak ve istemci ayrımı gözetmeksizin PKCE kullanımını zorunlu kılacaktır.

Bunun yanı sıra, token hırsızlığına karşı geliştirilen DPoP (Demonstrating Proof-of-Possession) teknolojisi, JWT'lerin sadece çalınarak kullanılmasını imkansız hale getirmeyi hedefler. DPoP sayesinde, token gönderilirken istemciye ait özel bir imza ile ilişkilendirilir; böylece bir saldırgan token'ı ele geçirse bile istemcinin cihazına sahip olmadığı sürece bu token'ı API'lere karşı kullanamaz. Geleceğe uyumlu kurumsal mimariler tasarlarken bu yeni nesil güvenlik standartlarının yakından takip edilmesi ve mevcut sistemlerin bu doğrultuda güncellenmesi stratejik bir kazanç sağlayacaktır.

Sıkça Sorulan Sorular

OAuth 2.0 yerine sadece JWT kullanmak güvenli midir?

Tek başına JWT kullanımı, kimlik doğrulaması yapılmış oturumların taraflar arasında taşınması için uygundur ancak üçüncü taraf yetki devri ve kapsamlı erişim kontrol akışları için yetersizdir. Güvenli, ölçeklenebilir ve dışa açık bir API ekosisteminde, yetkilendirme standartlarını belirleyen OAuth 2.0 protokolü ile birlikte kullanılması gerekir.

API güvenliği için JWT mi yoksa OAuth 2.0 mı seçilmeli?

Bu iki kavram birbiriyle rekabet halinde değildir. API güvenliğinde OAuth 2.0 yetki devrini ve erişim akışlarını yönetirken, JWT bu akışlar sonucunda üretilen erişim belirtecini (access token) taşımak için en uygun seçenektir; dolayısıyla ikisi birlikte tercih edilmelidir.

JWT içindeki veriler dışarıdan okunabilir mi?

Evet, standart bir JWT sadece Base64URL ile kodlandığı için şifrelenmemiştir ve herkes tarafından çözülüp okunabilir. Bu nedenle JWT payload (veri) kısmında KVKK/GDPR kapsamına giren kişisel veriler, şifreler veya hassas kurumsal bilgiler asla açık şekilde saklanmamalıdır.

OAuth 2.0 kimlik doğrulama (Authentication) için yeterli midir?

Hayır, OAuth 2.0 yalnızca bir yetkilendirme (Authorization) protokolüdür ve "bu kullanıcı kimdir?" sorusuna doğrudan yanıt vermez. Kimlik doğrulama gereksinimleri için OAuth 2.0'ın üzerine inşa edilen OpenID Connect (OIDC) katmanının kullanılması zorunludur.

Token hijacking (Token çalınması) durumunda ne yapılmalıdır?

Çalınan token'ın kötüye kullanılmasını önlemek için erişim belirteçlerinin (access token) geçerlilik süreleri çok kısa tutulmalıdır. Ayrıca arka planda çalışan bir kara liste (blacklist) mekanizmasıyla token anında iptal edilmeli ve "Refresh Token Rotation" aktif edilerek süreç güvenceye alınmalıdır.

RS256 ve HS256 şifreleme algoritmaları arasındaki temel fark nedir?

HS256 simetrik bir algoritmadır; hem imzalama hem doğrulama için aynı gizli anahtarı kullanır ve bu anahtarın mikroservisler arasında paylaşılması güvenlik riski yaratır. RS256 ise asimetrik bir algoritmadır; yetkilendirme sunucusu özel anahtarla (private key) imzalarken, API'ler sadece genel anahtarla (public key) güvenli doğrulama yapar.

JWT token'ı nerede saklanmalıdır?

Tarayıcı tarafında çalışan tek sayfalık uygulamalarda (SPA), JWT token'larının Cross-Site Scripting (XSS) saldırılarından korunması için HttpOnly , Secure ve SameSite=Strict bayraklarına sahip çerezlerde (cookies) saklanması en güvenli yöntemdir.

OAuth 2.1 nedir ve OAuth 2.0'dan farkı nedir?

OAuth 2.1, geçen on yılda biriken en iyi güvenlik pratiklerini tek bir standartta toplayan yeni bir taslaktır. Güvensiz kabul edilen "Implicit Grant" akışını tamamen devre dışı bırakır ve istemci türünden bağımsız olarak PKCE (Proof Key for Code Exchange) kullanımını zorunlu hale getirir.

Son Adım

Dijital projenizi bugün planlayalım

Web, yazılım, e-ticaret, mobil uygulama, entegrasyon, SEO veya GEO ihtiyacınızı net bir kapsama dönüştürelim.

OAuth 2.0 ve JWT Arasındaki Fark Nedir? | Webizm