JWT ve Oturum Tabanlı Kimlik Doğrulama
Oturum tabanlı ve JWT kimlik doğrulaması arasındaki farkları öğrenin. Trade-off'lar, avantajlar ve kullanım durumlarını keşfederek, uygulamalarınız için uygun kimlik doğrulama yöntemini seçin.
Genel olarak konuşursak, bir uygulama kullanmanın ilk aşaması kimlik doğrulama, burada son kullanıcı kimlik bilgilerini sağlayarak başarılı bir şekilde oturum açar. Bu aşamadan sonra, kimlik sistemi (örneğin, kimlik sağlayıcı, kimlik doğrulama sunucusu vb.) kullanıcının kim olduğunu ve hangi kaynaklara erişimlerinin olduğunu bilir.
HTTP doğası gereği durumsuz olduğu için, bir oturumdaki her istek bağımsızdır ve öncekilerin bilgilerini hatırlamaz. Kullanıcıları her eylem için yeniden kimlik doğrulamaya zorlamak zahmetlidir ve kullanıcı deneyimine zarar verir.
Haydi Oturum Tabanlı Kimlik Doğrulama ve JWT (JSON Web Tokens) kimlik doğrulaması ile tanışalım; kimlik doğrulama durumunu sürdürmek için kullanılan iki popüler yöntem. Her birinin benzersiz avantajları ve trade-off'ları vardır ve aralarındaki seçim, uygulamanızın özel ihtiyaçlarına bağlıdır. Eğer ikisi arasında karar veriyorsanız, 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 durumunun kaydını tutmak için sunucuya dayanır. Oturumlar oluşturarak ve yöneterek, sunucu kullanıcıların oturum açarak her istekte kimlik bilgilerini yeniden girmeden bir uygulama ile etkileşimde kalabilmesini sağlar.
Oturum tabanlı kimlik doğrulama nasıl çalışır?
Oturum oluşturma
- Kullanıcı kimlik doğrulaması sağlar ve bazı kimlik bilgilerini (örn. e-posta ve şifre) verir.
- Eğer kimlik bilgileri geçerliyse, sunucu bu oturumu temsil eden kalıcı bir kayıt oluşturur. Oturum, rastgele bir dize, kullanıcı tanıtıcısı, oturum başlangıç saati, oturum bitiş saati gibi bilgiler içerir.
SessionID
veritabanına kaydedilir ve tanımlama bilgisi olarak kullanıcının istemcisine geri gönderilir.
Oturum doğrulama
- İşlem kullanıcı tarafından manuel olarak tetiklenebilir (örneğin, bir sekmeye tıklamak, sayfayı yenilemek) veya istemci tarafından otomatik olarak (örneğin, başlangıç sayfası yüklemelerinde veya
SessionID
ile API çağrıları sırasında) tetiklenebilir. - Her bir sonraki çağrı, istemciden gelen oturum tanımlama bilgisi içeren bir HTTP isteği gönderir.
- Sunucu
SessionID
'yi sunucuda saklanan oturum verilerine bakarak doğrular. - Geçerliyse, sunucu isteği işler ve kullanıcıyı yetkilendirir.
Bir oturum nasıl iptal edilir?
Oturumlar, hızlı erişim iptali gerektiğinde kullanışlı olan gerçek zamanlı olarak iptal edilebilir.
- Kullanıcılar manuel olarak oturum kapatır: Sunucu oturum kaydını siler, kullanıcıyı etkin bir şekilde oturumdan çıkarır.
- Yöneticiler kullanıcıyı zorla oturum kapattırır: Yöneticiler veya sistemler, veritabanından silerek belirli oturumları sonlandırabilir. Örneğin, bir güvenlik ihlali sırasında.
- Oturum süresi dolmuştur: Oturumlar, belirli bir etkin olmayan süre sonunda veya sabit bir süre sınırından sonra otomatik olarak sona erebilir.
Oturum tabanlı kimlik doğrulamanın avantajları
- Basit ve güvenilir: Oturum kaydı, yüksek bir güven derecesi sağlayarak merkezi bir kaynak sağlar ve yetkilendirme kararlarını daha güvenilir hale getirir.
- Gerçek zamanlı iptal: Oturum kaydını silerek veya geçersiz hale getirerek bir kullanıcının erişimi hızlı bir şekilde iptal edilebilir.
Oturum tabanlı kimlik doğrulamanın dezavantajları
- Dağıtık sistemde gecikme: Çoklu sunucular arasında oturum verilerini korumak, her zaman bir oturum deposu senkronizasyonu gerektirir. Bu, sunucunun her istekte oturum deposunu kontrol etmesi gerektiği için ek gecikme tanıtır.
- Yüksek kaynak tüketimi: Her oturum sunucu kaynaklarını alır, kullanıcı tabanı büyüdüğünde performansı etkiler.
- Güvenlik riski: Oturum ele geçirme (çalıntı oturum tanımlama bilgileri aracılığıyla) yetkisiz kullanıcı erişimine izin verebilir.
- API'ler için sınırlı kullanım: Oturum tabanlı kimlik doğrulama, mobil uygulamalar için pek uygun değildir. Oturum verilerini sunucuda depolar, bu da birçok kullanıcı ile yükü ve karmaşıklığı artırabilir. Ayrıca, mobil cihazlarda yönetilmesi daha zor olan tanımlama bilgileri kullanılır.
JWT kimlik doğrulaması nedir?
JSON Web Tokens (JWTs), tüm ilgili kullanıcı bilgilerini doğrudan bir token'a gömerek, JSON nesnesi kullanarak farklı bir yaklaşım benimser. Oturum tabanlı yöntemlerin aksine, JWT'ler durumsuzdur, yani sunucu, kimlik doğrulama kayıtlarını yönetmez.
JWT kimlik doğrulaması nasıl çalışır?
Bir JWT üç bölümden oluşur: bir başlık, yük ve imza.
- Başlık, imzalama algoritmasını (örneğin, HS256) ve token türünü (JWT) içerir.
- Yük, kullanıcının kimliği, kullanıcı rolü ve son kullanma tarihi gibi temel iddiaları içerir.
- İmza, başlık ve yükü imzalamak için bir anahtar kullanarak imzanın üzerinde oynama yapılıp yapılmadığını doğrulamalarına olanak tanır.
JWT verilmesi
- İstemci kullanıcı kimlik bilgilerini kimlik doğrulama sunucusuna gönderir (Bir evrensel kimlik sağlayıcı, birden fazla alan arasında erişim yönetmek için özellikle yararlıdır.)
- Başarılı bir kimlik doğrulamanın ardından, sunucu başlık, yük ve imzayı içeren bir JWT oluşturur.
- Kimlik Doğrulama Sunucusu, verilen tokenı İstemci'ye gönderir. İstemci, JWT'yi (örneğin tanımlama bilgisi, localStorage veya sessionStorage'te) saklar.
Oturum tabanlı iş akışları benzer bir süreci takip eder. Ancak kimlik doğrulamasından sonra kullanıcı bilgileri bir oturum içinde sunucuda saklanırken JWT'ler, depolama ve sonraki kullanımları için istemciye gönderilen tokenlara dayanır.
Token doğrulama
- Ardışık API isteklerinde, istemci JWT'yi
Authorization
başlığında(Bearer <token>
) gönderir. - Sunucu, JWT'nin imzasını bir gizli anahtar veya ortak anahtar kullanarak doğrular ve iddialarını kontrol eder (örn., sona erme, veren).
- Eğer token geçerliyse, sunucu istemciye talep edilen kaynaklara erişim izni verir.
Oturum tabanlı kimlik doğrulama, genellikle harici veya merkezi veritabanlarına dayanıyorsa, yavaş olabilen bir oturum deposunu sorgulamasını gerektirir. Aksine, JWT kimlik doğrulama durumsuzdur, tüm gerekli bilgiler istemci tokenında saklanır ve güvenliği sağlamak için imzayı kullanır. Bu durum yönetiminin ortadan kalkmasını sağlar ve dağıtık sistemlerde özellikle daha hızlı ve daha ölçeklenebilir hale gelir.
Bir JWT nasıl iptal edilir?
İstemci tarafında oturumu kapatma genellikle yerel oturumu temizlemek ve depolama alanından tokenları (ID, erişim, yenileme tokenı) 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 oturum değişmeden kalır. Sonuç olarak, kullanıcılar hala aynı oturum altında diğer uygulamalara erişebilirler token süresi dolana veya manuel olarak iptal edilene kadar.
JWT'yi (JSON Web Token) iptal etmek, oturum tabanlı kimlik doğrulamadan daha zordur çünkü JWT'ler durumsuzdur ve özel stratejiler uygulanmadığı sürece bir kez verildikten sonra iptal edilemezler. Yaygın yöntemler arasında şunlar bulunur:
- Kısa sona erme süreleri: JWT için kısa bir
exp
iddiası (örn. 15 dakika) ayarlayın. Süresi dolduğunda, kullanıcı yeniden kimlik doğrulamak zorundadır. Bir token etkisiz hale gelirse, riskleri en aza indirir, çünkü saldırgan sadece sınırlı bir süre boyunca kullanabilir. Yeniden kimlik doğrulamanın zorluklarını en aza indirmek için yenileme tokenı kullanılabilir, bu da kullanıcı deneyimini kesintisiz tutmanızı sağlar. - Token kara listesi: Kritik durumlar için (örn. kullanıcı oturumu kapatma, parola değiştirme), iptal edilen tokenların bir kara listesini tutun. Sunucu, gelen tokenları bu engel listesine karşı kontrol eder ve eşleşmeleri reddeder. Etkili olmakla birlikte, bu yaklaşım iptal edilen tokenları izlemeyi gerektirir ve bu, JWT'lerin durumsuz doğasına aykırı düşer ve liste büyüdükçe verimsiz hale gelebilir.
- İptal son noktası: Yetkilendirme sunucusu üzerinde tokenların (örn., yenileme tokenları) iptal edilebileceği bir iptal son noktası tanıtın. Bir yenileme tokenı iptal edildiğinde, ondan verilen herhangi bir erişim tokenı tekrar yenilenemez. Bu yöntem OAuth2 süreçlerinde iyi çalışır.
JWT kimlik doğrulamanın avantajları
- Hızlı ve daha açıklayıcı: JWT'lerin kendi kendine yeten doğası, istemci tarafı doğrulamasını daha hızlı ve daha verimli hale getirir, sunucuyla etkileşim ihtiyacı olmadan. Token içinde özel iddialar (örn., kullanıcı rolleri veya diğer ilgili veriler) içerebilir, böylece sunucular rollerini bir veritabanını sorgulamadan belirleyebilir.
- Gelişmiş güvenlik: JWT'ler imzalama ve şifreleme tekniklerini kullanarak 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 üzerinde kimlik doğrulama yapmasına olanak tanır.
- Mobil dostu: JWT'ler, stateless kimlik doğrulama gerektiren mobil uygulamalar için harikadır. Tokenlar istemci tarafında saklanabilir ve her istek ile gönderilebilir, bu da verimliliği ve kullanım kolaylığını artırır.
JWT kimlik doğrulamanın dezavantajları
-
JWT gerçek zamanlı güncellenmemiştir
Bir JWT imzalandığında, iptal edilemez veya güncellenemez, ve imza geçerli olduğu ve süresi dolmadığı sürece geçerli kabul edilir.
Bir kullanıcının erişim izinleri değişirse (genellikle düşürülür), kullanıcı kaynaklara kaldırılan erişime sahip olabilir, JWT süresi dolana kadar. Benzer şekilde, bir JWT rol tabanlı yetkilendirme bilgileri içeriyorsa, yeni yetkilendirme kapsamı eskisi süresi bitene kadar etkili olmayacaktır. Yani, JWT'ler gerçek zamanlı iptal için uygun değildir ve kullanıcılar bunu hafifletmek için uygun bir sona erme süresi belirleyebilir.
-
Birden fazla cihaz ve iptal ikilemi
Kullanıcı iptalini tüm cihazlardan gerçekleştirmek için tüm verilen JWT'leri süresi dolmadan önce doğrulamak mümkün değildir. Teoride imzalama anahtarını iptal ederek JWT'yi geçersiz kılmak mümkün olabilir, ancak bu, o anahtarı kullanarak tüm JWT'leri de geçersiz kılacaktır; ve önbellek anahtarlarını yönetme süreci, bu yaklaşımı basit kullanıcı iptal işlemleri için pratik yapmaz.
Bazı kimlik sağlayıcıları, bu JWT sorunlarına yönelik önceden oluşturulmuş çözümler sunabilir. Daha fazla bilgi için, "JWT Kimlik Doğrulama Deneyimini Geliştirmek İçin En İyi Uygulamalar." bölümüne bakın.
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ı korumak için iki popüler yaklaşımdır. Her iki yaklaşımın da artıları ve eksileri varken, farklı fayda ve zorluklar sunarlar.
Oturumlar, bireysel istek yetkilendirmesi için daha güçlü garantiler sağlar ve güvenli bir şekilde uygulamak daha basittir. Ancak, sunucu taraflı veritabanı doğrulamasına güvenmeleri, özellikle yüksek tepki veren uygulamalar için kullanıcı deneyimini olumsuz etkileyebilecek gecikme yükü getirir.
JWT'ler ise daha hızlı yetkilendirme ve harici uygulamalarla birlikte çalışabilirlik için avantajlıdır, ancak güvenlik karmaşıklıklarını ele almak için daha fazla geliştirici çabası gerektirir. Örneğin, kullanıcının erişimi iptal edildiğinde istemcileri önbellekteki JWT'yi temizlemeye ve kullanıcıyı tekrar kimlik doğrulamaya zorlamak için müşterilere bilgi vermek için webhooklar kullanabiliriz.
Token tabanlı kimlik doğrulama, ölçeklenmesi daha uygun hale geldiği ve hala yönetilebilir çekinceleri olduğu için daha modern uygulamalar tarafından daha fazla benimseniyor.
Oturum ve JWT: Doğru yöntemi seçmek
Kimlik doğrulama yönteminiz, uygulamanızın mimarisi ve özel ihtiyaçları ile uyumlu olmalıdır. İşte karar vermenize yardımcı olacak hızlı bir rehber:
Ne zaman oturum tabanlı kimlik doğrulama kullanılmalı
Oturum tabanlı kimlik doğrulama, gerçek zamanlı oturum kontrolüne ihtiyaç duyduğunuzda, merkezi yönetim ihtiyacı duyduğunuzda veya ölçeklenebilirlik bir meseleyse en iyi şekilde çalışır. İşte parladığı yerler:
-
Kalıcı oturumlarla web uygulamaları
Çevrimiçi alışveriş siteleri gibi platformlar için, oturumlar ziyaretleri sırasında kullanıcıları, alışveriş sepetlerini ve tercihlerini takip etmek için gereklidir.
-
Gerçek zamanlı oturum kontrolü gerektiren uygulamalar
Bankacılık veya finansal hizmetler gibi uygulamalar, sağlam erişim yönetimi ve güvenliği sağlamak için sunucu kontrolünde oturum verilerinden yararlanır.
-
Tek sunuculu veya küçük ölçekli sistemler
Ağır ölçeklenebilirlik ihtiyacı olmayan dahili araçlar veya küçük ölçekli uygulamalar, basit oturum yönetimiyle kullanılabilirlik ve güvenilirlik sağlar.
Ne zaman JWT kimlik doğrulama kullanılmalı
JWT kimlik doğrulama, ölçeklenebilirlik, verimlilik ve dağıtık sistemleri önceliklendiren uygulamalar için daha uygundur. İstemci ve sunucular arasındaki durumsuz etkileşimler için özellikle kullanışlıdır. Aşağıdakiler 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 ve kullanıcıların bir kez kimlik doğrulaması yapmasına ve aynı token kullanarak birden fazla hizmet veya uygulamaya kesintisiz erişmesine olanak tanır. Erişim tokenları ve ID tokenları için JWT formatı kullanılarak OAuth 2.0 ve OIDC kullanarak güvenli bulut tabanlı uygulamaları açıklayın.
-
Mobil uygulamalar
Mobil uygulamalar genellikle kimlik doğrulama için JWT'leri tercih eder, çünkü tokenlar cihazda 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 güvenmeden, tokenları bağımsız olarak doğrulamasına ve ölçeklenebilirlik ve verimlilik sağlamasına olanak tanır.
-
Alanlar arası kimlik doğrulama
JWT'ler, birden fazla alan veya alt alan içeren senaryolarda (örn.,
api.example.com
,dashboard.example.com
vedocs.example.com
) mükemmel performans gösterir. Tanımlama bilgilerinin aksine, JWT'ler ek bağımlılıklara ihtiyaç duymadan alanlar arası kimlik doğrulama sağlar. -
API'ler ve web hizmetleri
RESTful API'ler ve web hizmetleri, hafif, taşınabilir ve sunucu tarafı oturum yönetimi gerektirmeyen oldukları için kimlik doğrulama için yaygın olarak JWT kullanır. Uygulamanızın kaynaklarla doğrudan iletişim kurması gerektiği senaryoları için makineden makineye kimlik doğrulama hakkında daha fazla bilgi edinin.
JWT kimlik doğrulaması deneyimini iyileştirme için en iyi uygulamalar
JWT kimlik doğrulaması harika bir araçtır, ancak kullanıcı deneyimini etkileyebilecek zorluklarla gelebilir. Logto, bu engelleri aşmak için kolay ve güvenilir bir çözüm sunar, bu da güvenli ve verimli bir kimlik doğrulama için en iyi seçenek haline getirir.
JWT ile kullanıcı oturumu kapatma sorunlarını ele alma
JWT kimlik doğrulamasında yaygın bir sorun, uygun bir kullanıcı oturumu kapatma deneyimini sağlamaktır. Logto, bu süreci anında SDK ile basitleştirir.
- Kullanıcıları istemci tarafında tokenları ve yerel oturumları temizleyerek ve Logto'nun oturum sonu noktasına yönlendirerek istemci uygulaması ve sunucudaki oturumları kolayca sonlandırabilirsiniz.
- Ek olarak, Logto arka kanal oturum kapatma'yı destekler, bu sayede Kullanıcı Doğrulama Sunucusu, oturumdan çıktığında aynı oturumu paylaşan tüm istemci uygulamalarını bilgilendirebilir.
Bu, ekosisteminizde tutarlı ve güvenli oturum yönetimini sağlar. Oturum kapatma işlemlerini ele almak hakkında daha fazla bilgi edinin.
Kullanıcı izin değişikliklerini ele alma
JWT ile kullanıcı izinlerine yapılan gerçek zamanlı değişiklikleri yönetmek de zor olabilir. JWT'lerin doğası gereği durumsuz olduğu için, güncellenmiş izinler veya roller, token sona erene kadar etkili olmayabilir. Logto, bunu etkili bir şekilde ele alacak stratejiler sunar:
- Bu kullanıcının izinlerini azaltmak için: Kısa erişim tokenı süresi ayarlayın veya bir API çağrısı ile dinamik olarak izinleri doğrulayın.
- Bu kullanıcı için yeni izinler eklemek için: Yetki Doğrulama Sunucusunu yeni izin kapsamını içerecek şekilde güncelleyin ve bu değişiklikleri uygulamak için kullanıcılara yeniden izin ver.
Bu çözümler, izinlerin güncel kalmasına ve daha güvenli, daha duyarlı bir sistem sağlanmasına yardımcı olur. İzin değişikliklerini ele alma hakkında daha fazla bilgi edinin.
Logto, ölçeklenebilir bir kimlik erişim yönetimi altyapısı olan, hem bulut hizmeti hem de açık kaynaklı sürümü ile mevcut bir eksiksiz kimlik çözümü sunar.