Türkçe
  • jwt
  • kimlik doğrulama
  • oturum
  • token
  • jwt iptali

JWT ve Oturum Tabanlı Kimlik Doğrulama

Oturum tabanlı ve JWT kimlik doğrulama arasındaki farkları öğrenin. Uygulamalarınız için doğru kimlik doğrulama şemasını seçmek üzere denge noktalarını, avantajları ve kullanım alanlarını keşfedin.

Ran
Ran
Product & Design
Darcy Ye
Darcy Ye
Developer

Genel olarak konuşursak, bir uygulamayı kullanırken ilk adım, son kullanıcının başarılı bir şekilde giriş yapabilmesi için kimlik bilgilerini sağladığı kimlik doğrulama işlemidir. Bu adımdan sonra, kimlik sistemi (yani, kimlik sağlayıcı, kimlik doğrulama sunucusu, vb.) kullanıcının kim olduğunu ve hangi kaynaklara erişimi olduğunu bilir.

HTTP doğası gereği durumsuz olduğundan, oturumdaki her istek bağımsızdır ve önceki isteklerden bilgi hatırlamaz. Her eylem için kullanıcılara yeniden kimlik doğrulaması yapmak zahmetlidir ve kullanıcı deneyimini zedeler.

Şimdi, kimlik doğrulama durumunu sürdürmek için iki popüler yöntem olan Oturum tabanlı kimlik doğrulama ve JWT (JSON Web Token'lar) kimlik doğrulama yöntemlerine bakalım. Her birinin kendine özgü avantajları ve denge noktaları vardır ve aralarındaki seçim uygulamanızın özel ihtiyaçlarına bağlıdır. İkisi arasında karar verirken, bu kılavuz size yardımcı olmak için burada.

Oturum Tabanlı Kimlik Doğrulama Nedir?

Oturum tabanlı kimlik doğrulama, kullanıcının kimlik doğrulama durumunu kaydetmek için sunucuya dayanır. Sunucunun oturumlar oluşturup yönetmesi sayesinde kullanıcılar, her istekte kimlik bilgilerini yeniden girmeye gerek kalmadan bir uygulamayla etkileşime devam edebilirler.

Oturum Tabanlı Kimlik Doğrulama Nasıl Çalışır?

Oturum Oluşturma

  1. Kullanıcı kimlik doğrulama için bazı kimlik bilgileri sağlar (örneğin, e-posta ve şifre).
  2. Eğer kimlik bilgileri geçerli ise, sunucu o oturumu temsil eden kalıcı bir kayıt oluşturur. Oturum bilgileri, rastgele bir dize, kullanıcı tanımlayıcısı, oturum başlangıç zamanı, oturum sona erme zamanı vb. içerir.
  3. OturumID veritabanında saklanır ve çerez olarak kullanıcının istemcisine geri gönderilir.

Oturum Doğrulama

  1. Süreç, kullanıcı tarafından manuel olarak (örneğin, bir sekmeye tıklayarak, bir sayfayı yenileyerek) veya istemci tarafından otomatik olarak (örneğin, başlangıç sayfa yükleri sırasında veya OturumID ile yapılan API çağrıları aracılığıyla) tetiklenebilir.
  2. Her bir sonraki çağrı, istemciden oturum çerezi içeren sunucuya bir HTTP isteği gönderir.
  3. Sunucu, oturumda depolanan oturum verilerine bakarak OturumID'yi doğrular.
  4. Eğer geçerliyse, sunucu isteği işleme alır ve kullanıcıya yetki verir.

Oturum Nasıl İptal Edilir?

Oturumlar, hızlı erişim iptalinin gerekli olduğu durumlarda, gerçek zamanlı olarak geçersiz kılınabilir.

  • Kullanıcı manuel olarak çıkış yapar: Sunucu, oturum kaydını silerek kullanıcının oturumunu kapatır.
  • Yöneticiler kullanıcıyı zorla oturumdan çıkarır: Yöneticiler veya sistemler, belirli bir oturumu veritabanından silerek sonlandırabilir. Örneğin, bir güvenlik ihlali sırasında.
  • Oturumların sona ermesi: Oturumlar, belirli bir süre boyunca etkinlik olmadığında veya belirli bir süre sınırının ardından otomatik olarak sona erebilir.

Oturum Tabanlı Kimlik Doğrulamanın Avantajları

  • Basit ve güvenilir: Oturum kaydı, merkezi bir kaynak sunar ve yüksek güven derecesi, yetkilendirme kararlarını daha güvenilir hale getirir.
  • Gerçek zamanlı iptal: Oturum kaydını silerek veya geçersiz kılarak, bir kullanıcının erişimi çabucak iptal edilebilir.

Oturum Tabanlı Kimlik Doğrulamanın Dezavantajları

  • Dağıtık sistemde gecikme: Birden çok sunucu üzerinde oturum verilerini sürdürmek her zaman bir oturum deposunun senkronize edilmesini gerektirir. Bu, sunucunun her istekte oturum deposunu kontrol etmesi gerektiği için ek gecikmeye neden olur.
  • Yüksek kaynak tüketimi: Her oturum sunucu kaynaklarını kullanır ve kullanıcı tabanı ölçeklendiğinde performansı etkiler.
  • Güvenlik riski: Oturum çerezlerinin çalınması yoluyla oturum kaçırma yetkisiz erişime izin verebilir.
  • API'ler için sınırlı kullanım: Oturum tabanlı kimlik doğrulama, mobil uygulamalar için iyi değildir. Oturum verilerini sunucuda saklar, bu da çok sayıda kullanıcıyla yük ve karmaşıklığı artırabilir. Ayrıca, mobil cihazlarda işlenmesi zor olan çerezleri kullanır.

JWT Kimlik Doğrulama Nedir?

JSON Web Token'lar (JWT), tüm ilgili kullanıcı bilgilerini doğrudan bir JSON nesnesi içerisindeki bir jetona gömerek farklı bir yaklaşım benimserler. Oturum tabanlı yöntemlerin aksine, JWT'ler durumsuzdur, yani sunucu kimlik doğrulama kayıtlarını yönetmez.

JWT Kimlik Doğrulama Nasıl Çalışır?

Bir JWT üç bölümden oluşur: başlık, yük ve imza.

  • Başlık, imzalama algoritmasını (örneğin, HS256) ve jeton tipini (JWT) içerir.
  • Yük, kullanıcı kimliği, kullanıcı rolü ve sona erme süresi gibi temel iddialar içerir.
  • İmza, imzanın değiştirilip değiştirilmediğini doğrulamak için başlık ve yükü imzalamak için bir anahtar kullanır.

image.png

JWT’lerin Verilmesi

  1. İstemci, kullanıcı kimlik bilgilerini kimlik doğrulama sunucusuna gönderir (Evrensel bir kimlik sağlayıcı, birden fazla alan üzerinde erişimi yönetmek için özellikle faydalıdır.)
  2. Başarılı kimlik doğrulamanın ardından sunucu, başlık, yük ve imza içeren bir JWT oluşturur.
  3. Kimlik Doğrulama Sunucusu, İstemci'ye verilen tokeni gönderir. İstemci, JWT'yi (örneğin, çerezlerde, localStorage'da veya sessionStorage'da) saklar.

Oturum tabanlı iş akışları benzer bir süreci takip eder. Ancak, kimlik doğrulamanın ardından, kullanıcı bilgileri oturum içinde sunucuya saklanırken, JWT'ler saklama ve sonraki kullanımlar için istemciye gönderilen tokenlere dayanır.

Jeton Doğrulama

  1. Ardışık API istekleri için istemci, Authorization başlığında (Bearer <token>) JWT'yi gönderir.
  2. Sunucu, gizli veya genel bir anahtar kullanarak JWT'nin imzasını doğrular ve iddialarını kontrol eder (örneğin, süresi, yayımlayan).
  3. Eğer token geçerliyse, sunucu istemcinin istenen kaynaklara erişim hakkı verir.

Oturum tabanlı kimlik doğrulama, sunucunun bir oturum deposunu sorgulamasını gerektirir, bu özellikle harici veya merkezi veritabanlarına dayanıyorsa yavaş olabilir. Buna karşılık, JWT kimlik doğrulaması durumsuzdur, gerekli tüm bilgilerin istemci tokeninde saklanması ve güvenliği sağlamak için imza kullanılması sayesinde. Bu, oturum yönetimine ihtiyaç duymadan, özellikle dağıtık sistemlerde daha hızlı ve daha ölçeklenebilir hale getirir.

JWT Nasıl İptal Edilir?

İstemci tarafında, oturumu kapatma genellikle yerel oturumu temizlemek ve depolama alanından tokenleri (ID, erişim, yenileme tokeni) kaldırmak anlamına gelir. Ancak, JWT kimlik doğrulaması için bu yalnızca kullanıcıyı yerel olarak oturumdan çıkarır ve yetkilendirme sunucusundaki merkezi oturumu olduğu gibi bırakır. Sonuç olarak, kullanıcılar aynı oturum altında diğer uygulamalara token süresi dolana veya manuel olarak sona erene kadar erişebilir.

JWT'yi (JSON Web Token) iptal etmek, oturum tabanlı kimlik doğrulamadan daha zordur çünkü JWT'ler durumsuzdur ve bir kez verildikten sonra geçersiz kılınamazlar, ancak belirli stratejiler uygulanmadıkça. Yaygın yöntemler şunları içerir:

  • Kısa sona erme süreleri: JWT için kısa bir exp iddiası ayarlayın (örneğin, 15 dakika). Süresi dolduğunda, kullanıcı yeniden kimlik doğrulaması yapmalıdır. Bir token ifşa edilirse, saldırganın yalnızca sınırlı bir süre için kullanabilmesi için risk azaltılır. Kesintisiz bir kullanıcı deneyimini sürdürmek için yenileme tokeni kullanılabilir.
  • Token kara listesi: Kritik durumlar için (örneğin, kullanıcı çıkışı, parola değişiklikleri), iptal edilen tokenlerin bir kara listesi tutulur. Sunucu, gelen tokenleri bu kara listeye karşı kontrol eder ve eşleşmeleri reddeder. Etkili olmasına rağmen, bu yaklaşım, iptal edilen tokenleri izlemeyi gerektirir, bu da JWT'lerin durumsuzluğuna karşı gelir ve liste çok büyükse verimsiz hale gelebilir.
  • İptal uç noktası: Yetkilendirme sunucusunda tokenlerin (örneğin, yenileme tokenleri) iptal edilebileceği bir iptal uç noktası tanıtın. Bir yenileme tokeni iptal edildiğinde, ondan verilen erişim tokenleri artık yenilenemez. Bu yöntem OAuth2 akışlarında iyi çalışır.

JWT Kimlik Doğrulamanın Avantajları

  • Hızlı ve daha bilgilendirici: JWT'lerin kendi kendine yeten doğası, istemci tarafı doğrulamayı sunucu etkileşimi gerektirmeden daha hızlı ve verimli hale getirir. Ayrıca, özel iddialar (örneğin, kullanıcı rolleri veya diğer ilgili veriler) içerebilir, bu da sunucuların rollerini sorgulamadan belirlemelerine olanak tanır.
  • Gelişmiş güvenlik: JWT'ler, imzalama ve şifreleme teknikleri kullanır, bu da saldırıları daha zor hale getirir.
  • Alanlar arası destek: JWT'ler Tek Oturum Açma (SSO) ve alanlar arası kimlik doğrulama için mükemmeldir. Kullanıcıların aynı token ile birden fazla alan veya hizmet arasında kimlik doğrulaması yapmalarına olanak tanır.
  • Mobil uyumlu: JWT'ler, durumsuz kimlik doğrulama gerektiren mobil uygulamalar için harikadır. Tokenler istemci tarafında saklanabilir ve her istekte gönderilebilir, bu da verimlilik ve kullanım kolaylığını artırır.

JWT Kimlik Doğrulamanın Dezavantajları

  • JWT gerçek zamanlı bir şekilde güncellenmez

    Bir JWT imzalandığında, iptal edilemez veya güncellenemez ve imzası geçerli olduğu ve süresi dolmadığı sürece geçerli kabul edilir.

    Eğer bir kullanıcının erişim izinleri (genellikle düşürülür) değişirse, kullanıcı hala kaynaklara erişim hakkı olacaktır, ta ki JWT'nin süresi dolana kadar. Benzer şekilde, eğer bir JWT rol tabanlı yetkilendirme bilgileri içeriyorsa, yeni yetkilendirme kapsamı, eski JWT'nin süresi dolana kadar yürürlüğe girmeyecek. Başka bir deyişle, JWT'ler gerçek zamanlı iptal için uygun değildir ve kullanıcılar bu sorunu hafifletmek için uygun bir sona erme süresi ayarlayabilir.

  • Çoklu cihaz ve iptal ikilemi

    Tüm cihazlar için kullanıcı iptalini gerçekleştirmek için, tüm verilmiş JWT'leri süresi dolmadan önce doğrulamak mümkün değildir. Teorik olarak, imzalama anahtarını iptal etmek JWT'yi geçersiz hale getirebilir, ancak bu tüm JWT'leri o anahtarla geçersiz kılar, ve önbellek anahtarlarını yönetme süreci bu yaklaşımı basit kullanıcı iptali işlemleri için elverişsiz hale getirir.

Bazı kimlik sağlayıcılar, bu JWT sorunları için önceden oluşturulmuş çözümler sunabilir. Daha fazla bilgi için "JWT Kimlik Doğrulama Deneyimini Geliştirmek İçin En İyi Uygulamalar" başlıklı makaleye göz atabilirsiniz.

JWT ve Oturum Arasındaki Fark Nedir?

Oturumlar ve JWT'ler, durumsuz bir HTTP dünyasında kimlik doğrulama ve yetkilendirme bağlamını sürdürmek için iki popüler yaklaşımdır. Her iki yaklaşımın da artı ve eksileri vardır, faydalar ve sakıncalar sunarlar.

Oturumlar, bireysel istek yetkilendirmesi için daha güçlü garantiler sunar ve güvenli bir şekilde uygulanması daha basittir. Ancak, sunucu tarafı veritabanı doğrulamasına bağımlılığı ek gecikmelere sebep olur, bu da son derece duyarlı uygulamalar için kullanıcı deneyimini olumsuz etkileyebilir.

Buna karşılık, JWT'ler daha hızlı yetkilendirme ve harici uygulamalarla birlikte çalışabilirlik için avantajlıdır, ancak güvenlikle ilgili karmaşıklıkları ele almak için daha fazla geliştirici çabası gerektirir. Örneğin, kullanıcı erişimi iptal edildiğinde müşterilere bildirme amacıyla webhook’lar kullanabiliriz ve bu sayede müşteriler önbelleğe alınmış JWT'yi temizler ve kullanıcıdan yeniden kimlik doğrulaması yapmasını sağlar.

Token tabanlı kimlik doğrulama, yine de idare edilebilen eksiklikleri ile ölçeklenmeye daha uygun olduğundan, giderek daha fazla modern uygulama tarafından benimseniyor.

Oturum vs. JWT: Doğru Yöntemi Seçmek

Kimlik doğrulama yönteminiz uygulamanızın mimarisine ve özel ihtiyaçlarına uygun olmalıdır. İşte size karar vermenize yardımcı olacak hızlı bir kılavuz:

Oturum Tabanlı Kimlik Doğrulama Ne Zaman Kullanılmalı

Oturum tabanlı kimlik doğrulama, gerçek zamanlı oturum kontrolü gerektiğinde, merkezi yönetim gerektiğinde veya ölçeklenebilirliğin büyük bir sorun olmadığı durumlarda en iyi çalışır. İşte parladığı yerler:

  • Kalıcı oturumlarla web uygulamaları

    Çevrimiçi alışveriş web siteleri gibi platformlar için oturumlar, kullanıcıları, alışveriş sepetlerini ve ziyaret sırasında tercihlerini izlemek için gereklidir.

  • Gerçek zamanlı oturum kontrolü gerektiren uygulamalar

    Bankacılık veya finansal hizmetler gibi uygulamalar, sunucu kontrollü oturum verilerinden yararlanarak sağlam erişim yönetimi ve güvenliği sağlar.

  • Tek sunucu veya küçük ölçekli sistemler

    Ölçeklenebilirlik ihtiyaçları ağır olmayan iç araçlar veya küçük ölçekli uygulamalar, kullanım kolaylığı ve güvenilirlik için basit oturum yönetimi ile başarı sağlar.

JWT Kimlik Doğrulama Ne Zaman Kullanılmalı

JWT kimlik doğrulama, ölçeklenebilirliğe, verimliliğe ve dağıtık sistemlere öncelik veren uygulamalar için daha uygundur. İstemci ve sunucu arasında durumsuz etkileşimler için özellikle faydalıdır. Aşağıdaki senaryolar için token tabanlı kimlik doğrulamayı düşünün:

  • Tek Oturum Açma (SSO)

    JWT'ler Tek Oturum Açma için mükemmeldir, böylece kullanıcılar bir kez kimlik doğrulaması yapıp birden çok hizmet veya uygulamaya aynı token ile sorunsuz erişebilir. Erişim tokenleri ve Kimlik tokenleri için JWT formatıyla OAuth 2.0 ve OIDC kullanarak güvenli bulut tabanlı uygulamalar hakkında detaylı bir açıklama paylaşın.

  • Mobil uygulamalar

    Mobil uygulamalar, genellikle jwt'leri kimlik doğrulama için tercih eder, çünkü tokenler cihaz üzerinde güvenli bir şekilde saklanabilir ve her API isteği ile gönderilebilir. Android / iOS için JWT kimlik doğrulamasının hızlı entegrasyonunu keşfedin.

  • Mikro hizmet mimarileri

    Mikro hizmet ortamlarında, JWT'ler her hizmetin merkezi bir oturum deposuna dayanmaksızın tokeni bağımsız olarak doğrulamasına olanak tanır, bu da ölçeklenebilirliği ve verimliliği sağlar.

  • Alanlar arası kimlik doğrulama

    JWT'ler, birden fazla alan veya alt alanı içeren senaryolarda mükemmel performans gösterir (örneğin, api.example.com, dashboard.example.com, ve docs.example.com). Çerezlerin aksine, JWT'ler ek bağımlılıklar olmadan alanlar arasında kimlik doğrulaması sağlar.

  • API'ler ve web servisleri

    RESTful API'ler ve web servisleri, genellikle hafif, taşınabilir oldukları ve sunucu tarafı oturum yönetim ihtiyacını ortadan kaldırdıkları için JWT'leri kullanır. Uygulamanızın doğrudan kaynaklarla iletişim kurması gereken senaryolar için Makineler arası kimlik doğrulama hakkında daha fazla bilgi edinin.

JWT Kimlik Doğrulama Deneyimini İyileştirmek İçin En İyi Uygulamalar

JWT kimlik doğrulama harika bir araçtır, ancak kullanıcı deneyimini etkileyebilecek zorluklarla birlikte gelebilir. Logto, bu engelleri aşmak için kolay ve güvenilir bir çözüm sunarak güvenli ve etkin kimlik doğrulama için en iyi seçimdir.

JWT ile Kullanıcı Oturum Kapatma Sorunlarını Ele Alma

JWT kimlik doğrulaması ile ilgili yaygın bir sorun, uygun bir kullanıcı oturum kapatma deneyimi sağlamaktır. Logto, bu süreci kutusundan çıktığı gibi SDK ile basitleştirir.

  • İstemci tarafında tokenleri ve yerel oturumları temizleyerek ve kullanıcıları Logto’nun oturum sonu uç noktasına yönlendirerek, hem istemci uygulamasında hem de sunucuda oturumları kolayca sonlandırabilirsiniz.
  • Ek olarak, Logto, aynı oturumu paylaşan tüm istemci uygulamalarına bir kullanıcı oturum kapattığında yetkilendirme sunucusunun bildirimde bulunmasını sağlayan arka kanal oturum kapama desteği sunar.

Bu, ekosisteminizde tutarlı ve güvenli oturum yönetimi sağlar. Oturum kapatma mekanizmaları hakkında daha fazla bilgi edinin ve oturum kapatma işlemini nasıl uygulayacağınızı öğrenin.

Kullanıcı İzinleri Değişikliklerini Ele Alma

JWT ile kullanıcı izinlerinde gerçek zamanlı değişiklikleri yönetmek de zor olabilir. JWT'ler tasarım gereği durumsuz olduğu için, her güncellenmiş izin veya rol token süresi dolana kadar etkili olmayabilir. Logto, bunu etkili bir şekilde yönetmek için stratejiler sunar:

  • Bu kullanıcının izinlerini azaltmak için: Kısa erişim tokeni sona erme süreleri kullanın veya izinleri API çağrısı ile dinamik olarak doğrulayın.
  • Bu kullanıcı için yeni izinler eklemek için: Yetkilendirme sunucusunu yeni izin kapsamını içerecek şekilde güncelleyin ve bu değişikliklerin uygulanabilmesi için kullanıcılardan yeniden onay alın.

Bu çözümler, izinleri güncel tutmanıza ve daha güvenli, daha hızlı bir sistem sağlamanıza yardımcı olur. Kullanıcı izinlerinde gerçek zamanlı değişiklikleri yönetme hakkında daha fazla bilgi edinin.

Logto, ölçeklenebilir bir kimlik erişim yönetimi altyapısı için bulut hizmeti ve açık kaynak sürümü ile eksiksiz bir kimlik çözümü sunar.