Takip et

Oturum Yönetimi: Çerezler, Oturumlar ve JWT ile Güvenli Bağlantılar

Web uygulamalarında kullanıcı deneyimini zenginleştirmenin ve güvenliği sağlamanın anahtarlarından biri oturum yönetimidir. HTTP protokolünün doğası gereği durumsuz olması, her isteğin birbirinden bağımsız değerlendirilmesi anlamına gelirken, modern uygulamalar kullanıcıları tanımak, oturumlarını sürdürmek ve kişiselleştirilmiş deneyimler sunmak zorundadır. Peki, bir kullanıcı sisteme giriş yaptığında, web sunucusu onu sonraki taleplerde nasıl tanır ve bilgilerini nasıl korur? Bu makale, çerezlerden sunucu taraflı oturumlara ve modern JWT (JSON Web Tokens) yaklaşımlarına kadar oturum yönetiminin temel taşlarını, güvenlik zafiyetlerini ve en iyi uygulama yöntemlerini derinlemesine inceleyecektir. Amacımız, uygulamanız için en uygun oturum yönetim stratejisini belirlemenize yardımcı olmaktır.

Günümüz dijital dünyasında, internet üzerindeki etkileşimlerimizin büyük bir kısmı sürekli bir “kimlik” algısıyla şekillenir. Bir e-ticaret sitesine giriş yaptığınızda sepetinize ürün eklemeniz, sosyal medyada akışınızı kaydırmanız veya bir bankacılık uygulamasında işlem yapmanız, sistemin sizi tanıması ve önceki eylemlerinizi hatırlaması sayesinde mümkün olur. Ancak, internetin temel protokolü olan HTTP (Hypertext Transfer Protocol), doğası gereği “durumsuz” (stateless) bir yapıya sahiptir. Bu ne anlama geliyor? Basitçe ifade etmek gerekirse, her HTTP isteği, bir öncekini veya sonrakini bilmez; her biri sunucu için yeni ve bağımsız bir taleptir. Bir kullanıcı adı ve şifre ile giriş yaptıktan hemen sonra yapacağı bir başka işlem için tekrar kimlik doğrulaması yapması gerekseydi, kullanıcı deneyimi dayanılmaz hale gelirdi. İşte tam bu noktada “oturum yönetimi” kavramı devreye girer ve durumsuz HTTP’yi durum bilgisi olan, kişiselleştirilmiş bir deneyime dönüştürür.

Oturum yönetimi, bir kullanıcının web uygulamasıyla etkileşimde bulunduğu süre boyunca kimliğini koruma ve bu etkileşimin durumunu sürdürme sürecidir. Bu süreç, kullanıcının sisteme giriş yapmasından (kimlik doğrulama) çıkış yapmasına kadar geçen süreyi kapsar. Oturum yönetimi sadece kullanıcı deneyimini iyileştirmekle kalmaz, aynı zamanda uygulamanın güvenliği için de kritik bir rol oynar. Yanlış yapılandırılmış veya zayıf bir oturum yönetimi, uygulamanızı kimlik avı, oturum kaçırma, yetkisiz erişim gibi ciddi güvenlik açıklarına karşı savunmasız hale getirebilir. Dolayısıyla, bu mekanizmaları doğru bir şekilde anlamak ve uygulamak, modern web geliştirmenin temel direklerinden biridir. Bu bölümde, oturum yönetiminin neden bu kadar kritik olduğunu ve bu hayati ihtiyaca farklı yaklaşımların nasıl çözüm sunduğunu ele alacağız. Bir e-ticaret sitesindeki alışveriş sepeti örneğini düşünelim: Kullanıcı sisteme giriş yapar, sepete ürünler ekler ve belki birkaç saat sonra tekrar gelip alışverişini tamamlar. Uygulamanın bu süreçte kullanıcının kimliğini ve sepetinin içeriğini nasıl hatırladığını anlamak, oturum yönetiminin temel prensiplerini kavramakla başlar. Bu, hem kullanışlılık hem de güvenlik açısından üzerinde durulması gereken önemli bir konudur. Çünkü bir oturum kimliğinin kötü niyetli kişilerin eline geçmesi, kullanıcının tüm hesap bilgilerine erişimini sağlayabilir. Bu nedenle, oturum yönetimi sadece bir kolaylık değil, aynı zamanda bir zorunluluktur.

Oturum Yönetimi Temelleri: Çerezler (Cookies) Nasıl Çalışır?

Oturum yönetiminin kalbinde yer alan ve belki de en eski, en yaygın kullanılan mekanizma çerezlerdir (cookies). HTTP’nin durumsuz yapısını aşmak için geliştirilen çerezler, sunucunun kullanıcıya özel bilgileri kullanıcının web tarayıcısında depolamasına olanak tanır. Bir kullanıcı bir web sitesini ziyaret ettiğinde, sunucu tarayıcıya küçük bir veri parçacığı gönderir ve bu parçacık tarayıcı tarafından depolanır. Kullanıcı aynı sunucuya sonraki taleplerde bulunduğunda, tarayıcı bu çerezleri otomatik olarak sunucuya geri gönderir. Bu sayede sunucu, her isteği bağımsız bir varlık olarak görmek yerine, belirli bir kullanıcıyla ilişkilendirebilir ve kullanıcının önceki eylemlerini “hatırlayabilir”.

Çerezler genellikle anahtar-değer çiftleri şeklinde depolanır ve son kullanma tarihi, yolu, alan adı gibi ek özniteliklere sahiptir. Örneğin, bir web sitesi sizin dil tercihinizi veya tema seçiminizi bir çerezde depolayabilir. Çerezler iki ana kategoriye ayrılır:

  • Oturum Çerezleri (Session Cookies): Bunlar genellikle sadece tarayıcı açık kaldığı sürece geçerli olan geçici çerezlerdir. Tarayıcı kapatıldığında otomatik olarak silinirler. Kullanıcı giriş bilgileri gibi hassas olmayan veya kısa ömürlü veriler için kullanılırlar.
  • Kalıcı Çerezler (Persistent Cookies): Belirli bir son kullanma tarihine sahip olan çerezlerdir. Bu tarih gelene kadar veya kullanıcı tarafından manuel olarak silinene kadar tarayıcıda kalırlar. “Beni Hatırla” fonksiyonları veya kişiselleştirilmiş ayarlar gibi uzun vadeli verileri depolamak için idealdirler.

Çerezlerin sunucu ve tarayıcı arasındaki akışı bir örnekle açıklayalım:

  1. Kullanıcı web sitesine ilk kez bağlanır.
  2. Sunucu, bir Set-Cookie başlığı ile bir çerez oluşturur ve tarayıcıya gönderir. Örneğin: Set-Cookie: sessionId=abc123xyz; Expires=Wed, 21 Oct 2024 07:28:00 GMT; Path=/; HttpOnly; Secure
  3. Tarayıcı, bu çerezi kendi depolama alanına kaydeder.
  4. Kullanıcı aynı siteye sonraki tüm isteklerinde, tarayıcı depoladığı sessionId=abc123xyz çerezini otomatik olarak sunucuya gönderir.
  5. Sunucu, gelen çerezi okuyarak kullanıcının kimliğini veya oturum durumunu belirler.

Çerezlerin kullanım alanları oldukça geniştir. En belirgin örnek, bir kullanıcının sisteme giriş yaptığında kimlik doğrulama bilgisini içeren bir oturum kimliğini (session ID) depolamaktır. Ancak çerezler, aynı zamanda alışveriş sepetlerini, dil tercihlerini, kullanıcı izleme bilgilerini ve reklam hedeflemelerini de yönetmek için kullanılır. Örneğin, bir web sitesine girip dil ayarını İngilizce’den Türkçe’ye çevirdiğinizde, bu tercih genellikle bir çerezde saklanır, böylece siteyi bir sonraki ziyaretinizde tercihiniz hatırlanır.

Çerezlerin yönetimi tarayıcılar tarafından otomatik olarak yapılsa da, geliştiricilerin güvenlik açısından dikkat etmesi gereken önemli noktalar vardır. Özellikle HttpOnly (JavaScript erişimine kapalı) ve Secure (sadece HTTPS üzerinden gönderilir) gibi öznitelikler, çerezlerin çalınma riskini önemli ölçüde azaltır. Bu öznitelikleri doğru bir şekilde kullanmak, oturum yönetiminin temel güvenlik katmanlarından birini oluşturur. Örneğin, bir oturum çerezinin HttpOnly olarak işaretlenmesi, XSS (Cross-Site Scripting) saldırılarında bile saldırganın çereze JavaScript üzerinden erişmesini engeller. Bu detaylar, çerezlerin basit bir veri depolama aracı olmaktan çok daha fazlası olduğunu gösterir.

Sunucu Taraflı Oturumlar (Sessions): Güvenliği Artırmanın Yolu Nedir?

Çerezler, kullanıcının kimliğini hatırlamak için harika bir temel sağlasa da, yalnızca çerezlerde hassas bilgileri depolamak güvenli değildir. Çünkü çerezler istemci tarafında depolanır ve potansiyel olarak kötü niyetli kullanıcılar tarafından manipüle edilebilir veya ele geçirilebilir. İşte bu noktada sunucu taraflı oturumlar (server-side sessions) devreye girer. Sunucu taraflı oturumlar, oturum yönetiminin güvenliğini önemli ölçüde artıran bir yaklaşımdır. Bu yöntemde, hassas kullanıcı bilgileri (kullanıcı kimliği, yetki seviyesi, sepet içeriği vb.) doğrudan tarayıcıya gönderilmek yerine, sunucuda güvenli bir şekilde depolanır.

Sunucu taraflı oturum mekanizması şu şekilde işler:

  1. Kullanıcı kimlik doğrulaması yapar (giriş yapar).
  2. Sunucu, bu kullanıcı için benzersiz bir “oturum kimliği” (session ID) oluşturur.
  3. Sunucu, kullanıcının tüm oturum verilerini (örneğin, kullanıcı adı, yetkilendirme bilgileri, alışveriş sepeti içeriği) bu oturum kimliğiyle ilişkilendirerek kendi belleğinde, veritabanında veya başka bir depolama biriminde (Redis, Memcached gibi) saklar.
  4. Bu oturum kimliği, genellikle bir çerez (HTTPOnly ve Secure bayraklarıyla birlikte) aracılığıyla istemciye gönderilir. İstemcinin tarayıcısı yalnızca bu kimliği saklar, gerçek oturum verilerini değil.
  5. Kullanıcı sonraki her isteğinde, tarayıcı bu oturum kimliği çerezini sunucuya geri gönderir.
  6. Sunucu, gelen oturum kimliğini kullanarak depoladığı oturum verilerini bulur ve kullanıcının durumunu tanır.

Bu yaklaşımın en büyük avantajı güvenliktir. Hassas veriler asla istemciye açık bir şekilde gönderilmez. İstemci, sadece bir referans noktası olan oturum kimliğini tutar. Bir saldırgan çerezleri ele geçirse bile, sadece oturum kimliğine erişmiş olur, doğrudan kullanıcı bilgilerine değil. Sunucu, bu kimliğin geçerliliğini kontrol edebilir ve şüpheli durumlarda oturumu sonlandırabilir.

Vaka Analizi: E-ticaret Sepeti
Bir e-ticaret uygulamasını düşünelim. Kullanıcı sisteme giriş yapar ve ürünleri sepetine ekler. Eğer sepet içeriği doğrudan bir çerezde depolansa, kullanıcı tarayıcı çerezlerini manipüle ederek sepete olmayan ürünleri ekleyebilir veya fiyatları değiştirebilir. Ancak sunucu taraflı oturum kullanıldığında:

  • Kullanıcı giriş yaptığında sunucu ona bir oturum kimliği verir (örneğin, sessionid=xyz789).
  • Kullanıcı sepete bir ürün eklediğinde, bu ürün bilgisi sunucudaki xyz789 oturumuyla ilişkilendirilir.
  • Kullanıcı farklı bir sayfaya gittiğinde, tarayıcı sessionid=xyz789 çerezini gönderir.
  • Sunucu, bu ID ile ilişkili olan sepetteki ürünleri getirir ve gösterir.

Bu sayede sepet içeriği güvenli bir şekilde sunucuda kalır ve istemci tarafında manipüle edilemez. Ayrıca, sunucu tarafında oturumlar sayesinde, kullanıcı uygulamadan çıksa bile (tarayıcıyı kapatsa bile, eğer kalıcı bir çerezle birlikte kullanılıyorsa) oturum bilgileri belli bir süre saklanabilir. Kullanıcı geri döndüğünde, eğer oturum hala geçerliyse, kaldığı yerden devam edebilir.

Ancak sunucu taraflı oturumların dezavantajları da vardır. Özellikle büyük ölçekli uygulamalarda ve dağıtık sistemlerde (microservices gibi), oturum verilerinin farklı sunucular arasında paylaşılması veya senkronize edilmesi karmaşık hale gelebilir. Her sunucunun kendi oturum deposu varsa, bir kullanıcının isteği farklı bir sunucuya yönlendirildiğinde oturum bilgisi kaybolabilir. Bu durumu aşmak için “yapışkan oturumlar” (sticky sessions) veya merkezi oturum depolama (örneğin, Redis) gibi çözümler kullanılır. Yapışkan oturumlar, bir kullanıcının tüm isteklerinin aynı sunucuya yönlendirilmesini sağlarken, merkezi oturum depolama ise tüm sunucuların aynı oturum veritabanını kullanmasına olanak tanır. Bu yaklaşımlar, sunucu taraflı oturumların ölçeklenebilirlik zorluklarını çözmek için önemlidir.

Modern Oturum Yönetimi: JWT (JSON Web Tokens) Nedir ve Nasıl Kullanılır?

Geleneksel sunucu taraflı oturumlar bazı ölçeklenebilirlik sorunlarına yol açabilirken, özellikle API odaklı uygulamalar, mikroservis mimarileri ve mobil uygulamalar için daha esnek ve hafif bir alternatif olan JSON Web Tokens (JWT) popülerlik kazanmıştır. JWT, istemci-sunucu iletişimi için kompakt, URL açısından güvenli bir şekilde bilgi alışverişi yapmanın bir yoludur. Temel fark, JWT ile oturum bilgisinin sunucuda depolanmak yerine, token’ın kendisinde şifrelenmiş veya imzalanmış olarak taşınmasıdır.

Bir JWT temelde üç bölümden oluşur, her biri bir nokta (.) ile ayrılır:

  1. Başlık (Header): Token türünü (JWT) ve kullanılan imzalama algoritmasını (HMAC SHA256 veya RSA gibi) içerir. Bu kısım Base64url ile kodlanır.
  2. Yük (Payload/Claims): Bu bölüm, kullanıcının kimliği, yetkilendirme rolleri, token’ın süresi (expiration time) gibi aslında oturum bilgilerini taşıyan verileri içerir. Bunlara “claim” denir ve genellikle JSON formatındadır. Bu kısım da Base64url ile kodlanır.
  3. İmza (Signature): Başlık ve yük Base64url ile kodlandıktan sonra, gizli bir anahtar kullanılarak bu iki bölümün birleşimiyle hesaplanan bir hash değeridir. İmza, token’ın bütünlüğünü doğrulamak ve içeriğinin değiştirilip değiştirilmediğini kontrol etmek için kullanılır. Sunucu, bu imza sayesinde token’ın geçerli ve güvenilir olup olmadığını anlar.

Bir JWT’nin akışı şöyledir:

  1. Kullanıcı kimlik doğrulaması yapar (kullanıcı adı ve şifre gönderir).
  2. Sunucu, kimlik doğrulamanın başarılı olduğunu doğrular ve kullanıcıya özel bilgilerle (örneğin, kullanıcı ID’si, rolleri) bir JWT oluşturur.
  3. Bu JWT, sunucu tarafından istemciye (genellikle bir HTTP yanıt başlığında veya yanıt gövdesinde) gönderilir.
  4. İstemci, bu JWT’yi tarayıcının yerel depolamasında (localStorage, sessionStorage) veya bir çerezde saklar.
  5. Kullanıcı sonraki her isteğinde, bu JWT’yi Authorization başlığı altında (Bearer token formatında) sunucuya geri gönderir.
  6. Sunucu, gelen JWT’nin imzasını gizli anahtarıyla doğrular. İmza geçerliyse, token’ın içeriğindeki bilgilere (payload) güvenilir ve kullanıcının kimliğini veya yetkilerini belirler.

Bir JWT örneği şöyle görünebilir:


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFuYSBVc2VyIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    

JWT'lerin en büyük avantajı, "durumsuz" (stateless) olmalarıdır. Sunucu, kullanıcının oturum bilgilerini kendi tarafında depolamak zorunda kalmaz. Her istekte gönderilen JWT, kullanıcının kimlik ve yetki bilgilerini kendi içinde barındırdığı için, sunucunun veritabanına her seferinde sorgu göndermesi veya merkezi bir oturum deposuna bağlanması gerekmez. Bu, özellikle yatay ölçeklenebilirlik (horizontal scaling) açısından büyük bir fayda sağlar, çünkü herhangi bir sunucu gelen token'ı doğrulayabilir ve işleyebilir. Mikroservis mimarilerinde veya mobil API'lerinde bu özellik vazgeçilmezdir.

Ancak JWT'lerin de dezavantajları vardır. En önemlisi, bir token oluşturulduktan sonra süresi dolana kadar iptal edilmesinin zor olmasıdır. Bir kullanıcının şifresi değişse veya hesabı kilitlense bile, elindeki JWT geçerliliğini korur. Bu sorunu çözmek için "refresh token" mekanizmaları kullanılır. Ayrıca, token'ın boyutu çerezlerden daha büyük olabilir ve her istekle birlikte gönderilmesi bant genişliği üzerinde küçük bir etki yaratabilir. Güvenlik açısından, gizli anahtarın çalınmaması ve token'ın depolandığı istemci tarafı ortamın (örneğin localStorage) XSS saldırılarına karşı korunması hayati önem taşır.

Oturum Yönetiminde Güvenlik Zafiyetleri Nelerdir ve Nasıl Önlenir?

Oturum yönetimi, bir web uygulamasının güvenlik mimarisinin en kritik bileşenlerinden biridir. Güvenli bir oturum yönetimi olmadan, diğer tüm güvenlik önlemleri etkisiz kalabilir. Ne yazık ki, oturum mekanizmaları sıklıkla saldırganların hedefi haline gelen çeşitli zafiyetlere sahiptir. Bu zafiyetleri anlamak ve bunlara karşı önlemler almak, kullanıcı verilerini ve uygulama bütünlüğünü korumak için hayati önem taşır.

Yaygın Oturum Yönetimi Güvenlik Zafiyetleri:

  1. Oturum Kaçırma (Session Hijacking): Bir saldırganın geçerli bir oturum kimliğini (session ID) çalarak, o kullanıcıymış gibi uygulamaya erişmesidir. Bu genellikle çerezlerin çalınmasıyla gerçekleşir.
  2. Çapraz Site Betik Çalıştırma (Cross-Site Scripting - XSS): Saldırganın web uygulamasına kötü niyetli istemci tarafı betik kodları enjekte etmesiyle olur. Bu kodlar, kullanıcıların oturum çerezlerini okuyabilir ve saldırgana gönderebilir.
  3. Çapraz Site İstek Sahteciliği (Cross-Site Request Forgery - CSRF): Saldırganın, kullanıcının kimlik doğrulaması yapılmış oturumundan, kullanıcının bilgisi veya rızası olmadan işlem yapmasını sağlamasıdır. Örneğin, kullanıcının bankacılık sitesinde para transferi yapmasını sağlayan bir istek göndermesi.
  4. Oturum Sabitleme (Session Fixation): Saldırganın, kullanıcı kimlik doğrulaması yapmadan önce bir oturum kimliği belirlemesi ve bu kimliği kullanıcıya kabul ettirmesidir. Kullanıcı bu kimlikle giriş yaptığında, saldırgan aynı kimliği kullanarak oturumu ele geçirebilir.
  5. Kaba Kuvvet (Brute Force) ve Tahmin Edilebilir Oturum Kimlikleri: Zayıf veya tahmin edilebilir oturum kimlikleri (örneğin, ardışık sayılar), saldırganların geçerli bir oturum kimliğini kolayca tahmin etmesine olanak tanır.
  6. Token Açığa Çıkması (JWT Özel): JWT'nin bir şekilde ele geçirilmesi durumunda, süresi dolana kadar yetkisiz erişim sağlayabilir. İptal mekanizmalarının eksikliği risk oluşturur.

Oturum Yönetiminde En İyi Uygulamalar ve Önlemler:

Bu zafiyetlere karşı koymak için bir dizi güvenlik önlemi alınmalıdır:

  • HTTPS Kullanımı: Tüm iletişimde HTTPS (Secure Sockets Layer/Transport Layer Security) kullanmak zorunludur. Bu, oturum kimliklerinin ağ üzerinden şifresiz olarak gönderilmesini ve dolayısıyla dinlenmesini (eavesdropping) engeller. Çerezler için Secure bayrağını kullanmak, çerezlerin yalnızca HTTPS üzerinden gönderilmesini sağlar.
  • HttpOnly Çerez Bayrağı: Oturum kimliklerini taşıyan çerezler için HttpOnly bayrağını kullanın. Bu bayrak, istemci tarafı betiklerinin (JavaScript) çerezlere erişmesini engeller ve XSS saldırılarında çerez çalınması riskini azaltır.
  • Güçlü ve Rastgele Oturum Kimlikleri: Oturum kimlikleri yeterince uzun, rastgele ve tahmin edilemez olmalıdır. Kriptografik olarak güvenli rastgele sayı üreteçleri kullanılmalıdır.
  • Oturum Süreleri ve Yenileme:
    • Oturumların makul bir yaşam süresi olmalıdır. Etkin olmayan oturumlar otomatik olarak sona erdirilmelidir (idle timeout).
    • Hassas işlemlerden (şifre değiştirme, para transferi) sonra oturum kimliği mutlaka yenilenmelidir (session regeneration). Bu, oturum sabitleme saldırılarını önler.
    • JWT kullanılıyorsa, kısa ömürlü erişim tokenları ve daha uzun ömürlü ancak tek kullanımlık yenileme tokenları (refresh tokens) kombinasyonu kullanılmalıdır. Yenileme tokenları, kullanıcı kimlik doğrulaması gerektirmeden yeni bir erişim tokenı almak için kullanılır ve tek seferlik kullanımdan sonra veya şüpheli durumlarda iptal edilebilir olmalıdır.
  • CSRF Koruması: CSRF saldırılarına karşı, her hassas işlem için benzersiz ve rastgele CSRF tokenları kullanılmalıdır. Bu tokenlar, formlar içinde gizli alanlar olarak veya HTTP başlıklarında gönderilebilir ve sunucu tarafından doğrulanır.
  • XSS Koruması: Kullanıcı girdilerini her zaman sanitize edin (temizleyin) ve çıkış kodlaması (output encoding) uygulayın. İçerik Güvenlik Politikası (Content Security Policy - CSP) gibi mekanizmalarla XSS riskini azaltın.
  • Güvenli Depolama (JWT için): JWT'ler istemci tarafında depolanırken, özellikle tarayıcının localStorage'ı XSS'e karşı savunmasız olabilir. Güvenlik kaygısı olan uygulamalarda, tokenları HttpOnly çerezlerinde saklamak daha güvenli bir alternatif olabilir. Ancak bu, CSRF saldırılarına karşı ek koruma gerektirir.
  • Oturum İptali (Logout): Kullanıcı çıkış yaptığında sunucu tarafında oturum kimliği derhal geçersiz kılınmalıdır. JWT tabanlı sistemlerde, token'ın sunucu tarafındaki bir kara listede (blacklist) işaretlenmesi veya yenileme tokenının iptali sağlanmalıdır.
Uzman İpucu: JWT kullanırken, erişim tokenlarınızın kısa ömürlü olduğundan emin olun (örneğin, 15-30 dakika). Daha uzun süreli oturumlar için, HttpOnly ve Secure bayraklarıyla işaretlenmiş, tek kullanımlık ve sunucu tarafında iptal edilebilir yenileme tokenları (refresh tokens) kullanın. Bu strateji, ele geçirilen bir erişim tokenının kötüye kullanım süresini sınırlar ve token iptalini mümkün kılar.

Bu güvenlik önlemleri, web uygulamalarınızdaki oturum yönetimini önemli ölçüde güçlendirecek ve kullanıcılarınızın verilerini kötü niyetli saldırılardan korumaya yardımcı olacaktır. Güvenlik, tek seferlik bir işlemden ziyade sürekli bir süreçtir ve düzenli denetimler ve güncellemeler gerektirir.

Mobil Uygulamalar İçin Oturum Yönetimi Stratejileri Nasıl Belirlenir?

Mobil uygulamalar, web tabanlı uygulamalardan farklı bir ortamda çalıştıkları için oturum yönetimi stratejileri de kendine özgü dinamiklere sahiptir. Web tarayıcısının çerezleri otomatik yönetme kolaylığı mobil platformlarda genellikle mevcut değildir ve mobil uygulamaların API'ler üzerinden sunucularla daha yoğun etkileşimde bulunması, token tabanlı çözümleri ön plana çıkarır. Bu bölümde mobil uygulamalar için en uygun oturum yönetimi stratejilerini ve dikkat edilmesi gereken noktaları ele alacağız.

Mobil Ortamın Özellikleri ve Oturum Yönetimine Etkileri:

  • Çerez Yönetimi: Mobil uygulamalarda, yerel tarayıcı (WebView) dışında doğrudan çerez yönetimi genellikle geliştiricinin sorumluluğundadır. Bazı mobil platformlar çerez depoları sunsa da, web'deki kadar entegre ve şeffaf değildir. Bu nedenle, oturum kimliğini bir çerezde saklamak yerine, doğrudan tokenlar üzerinde çalışmak daha yaygındır.
  • API Odaklı İletişim: Mobil uygulamalar genellikle bir arka uç (backend) API'si ile iletişim kurar. Bu API'ler durumsuz olma eğilimindedir ve her istekte kimlik doğrulama/yetkilendirme bilgisini bekler.
  • Güvenli Depolama: Mobil cihazlarda tokenların veya kimlik bilgilerinin güvenli bir şekilde depolanması kritik öneme sahiptir. Uygulama içi depolama alanları (SharedPreferences Android'de, UserDefaults iOS'ta) kötüye kullanıma açık olabilir. Güvenli depolama mekanizmaları (örn. Android Keystore, iOS Keychain) kullanılmalıdır.
  • Offline Çalışma: Bazı mobil uygulamalar çevrimdışı çalışabilme yeteneğine sahiptir. Bu durum, oturum bilgilerinin nasıl yönetileceği ve çevrimdışı kimlik doğrulamanın nasıl sağlanacağı konusunda ek karmaşıklıklar getirir.

Mobil Uygulamalarda Oturum Yönetimi İçin Popüler Stratejiler:

1. JWT (JSON Web Tokens) ve Yenileme Tokenları (Refresh Tokens):
Mobil uygulamalar için en yaygın ve önerilen yöntem JWT kullanımıdır. Ancak tek başına JWT'ler, ele geçirildiklerinde iptal edilmeleri zor olduğu için risk taşır. Bu nedenle, kısa ömürlü bir Erişim Tokenı (Access Token) ile daha uzun ömürlü bir Yenileme Tokenı (Refresh Token) kombinasyonu kullanılır:

  • Erişim Tokenı (Access Token): Kısa bir süre için (örneğin 15-30 dakika) geçerlidir ve API isteklerinde kimlik doğrulaması için kullanılır. Bu token, HTTP Authorization başlığında (Bearer şemasıyla) her istekte gönderilir.
  • Yenileme Tokenı (Refresh Token): Daha uzun bir ömre sahiptir (örneğin günler, haftalar). Erişim tokenı süresi dolduğunda, mobil uygulama yeni bir erişim tokenı almak için bu yenileme tokenını sunucuya gönderir. Yenileme tokenları, sadece yeni erişim tokenları almak için kullanılır ve API istekleri için kullanılmazlar.

Bu Yapının Avantajları:

  • Erişim tokenları kısa ömürlü olduğu için, ele geçirilseler bile kötüye kullanım süresi sınırlıdır.
  • Yenileme tokenları, kullanıcının tekrar giriş yapmasına gerek kalmadan uzun süreli oturumlar sağlar.
  • Yenileme tokenları, sunucu tarafında depolanabilir ve şüpheli durumlarda iptal edilebilir, bu da token iptali sorununu çözer.

Depolama ve Güvenlik:

  • Erişim Tokenı: Genellikle uygulama belleğinde saklanır. Uygulama kapatıldığında veya yeniden başlatıldığında kaybolabilir.
  • Yenileme Tokenı: Mutlaka güvenli bir depolama alanında (örn. Android Keystore, iOS Keychain) saklanmalıdır. Bu mekanizmalar, tokenları şifrelenmiş olarak depolanır ve diğer uygulamaların veya kötü niyetli yazılımların erişmesini engeller.

Örnek Akış:


// 1. Kullanıcı Girişi
async function login(username, password) {
    const response = await fetch('/api/login', {
        method: 'POST',
        body: JSON.stringify({ username, password })
    });
    const data = await response.json();
    // Sunucudan access_token ve refresh_token alınır
    secureStore.save('accessToken', data.accessToken); // Bellekte veya hızlı erişim deposunda
    secureStore.save('refreshToken', data.refreshToken); // Güvenli depolamada
}

// 2. API İsteği
async function fetchData(url) {
    let accessToken = secureStore.get('accessToken');
    const response = await fetch(url, {
        headers: { 'Authorization': Bearer ${accessToken} }
    });

    if (response.status === 401) { // Erişim tokenı süresi dolmuş
        const newAccessToken = await refreshAccessToken();
        if (newAccessToken) {
            accessToken = newAccessToken;
            // Yeni token ile isteği tekrar dene
            return fetch(url, {
                headers: { 'Authorization': Bearer ${accessToken} }
            });
        } else {
            // Yenileme tokenı da geçersiz, kullanıcıyı çıkış yapmaya zorla
            logout();
        }
    }
    return response.json();
}

// 3. Erişim Tokenını Yenileme
async function refreshAccessToken() {
    const refreshToken = secureStore.get('refreshToken');
    if (!refreshToken) return null;

    const response = await fetch('/api/refresh-token', {
        method: 'POST',
        body: JSON.stringify({ refreshToken })
    });
    if (response.ok) {
        const data = await response.json();
        secureStore.save('accessToken', data.accessToken);
        return data.accessToken;
    }
    return null;
}
    

Bu kod bloğu, mobil uygulamalarda JWT ve refresh tokenların nasıl kullanılacağına dair basit bir akışı göstermektedir. secureStore, cihazın güvenli depolama mekanizmalarını temsil eder.

2. Çerez Tabanlı Oturumlar (Geleneksel Web Görünümleri İçin):
Eğer mobil uygulamanız içinde WebView kullanarak web içeriği gösteriyorsanız, bu webview'ler genellikle geleneksel çerez tabanlı oturumları destekleyebilir. Ancak bu, native mobil deneyimden farklıdır ve WebView'in kendi güvenlik bağlamını yönetmek ek dikkat gerektirebilir.

Mobil uygulamalar için oturum yönetimi stratejisi belirlenirken, uygulamanın güvenlik ihtiyaçları, kullanıcı deneyimi beklentileri ve platformun sunduğu özellikler göz önünde bulundurulmalıdır. Genel olarak, JWT ve yenileme tokenları kombinasyonu, modern mobil uygulamalar için en sağlam ve ölçeklenebilir çözümü sunar.

Büyük Sistemlerde Oturum Yönetimi: Performans ve Ölçeklenebilirlik Nasıl Sağlanır?

Bir web uygulaması kullanıcı sayısıyla birlikte büyüdüğünde, oturum yönetiminin performansı ve ölçeklenebilirliği kritik bir hale gelir. Yüksek trafikli sistemlerde, binlerce veya milyonlarca eşzamanlı kullanıcının oturumunu verimli bir şekilde yönetmek, uygulamanın genel yanıt süresini ve güvenilirliğini doğrudan etkiler. Bu bölümde, büyük ölçekli sistemlerde oturum yönetiminde karşılaşılan zorlukları ve bunları aşmak için kullanılan stratejileri inceleyeceğiz.

Ölçeklenebilirlik Sorunları:

Geleneksel sunucu taraflı oturumlar (session-based) için temel ölçeklenebilirlik sorunu, oturum verilerinin sunucu belleğinde veya yerel diskinde depolanmasından kaynaklanır. Çok sayıda sunucunun olduğu bir ortamda, bir kullanıcının her isteği farklı bir sunucuya düşebilir. Eğer oturum verileri yalnızca tek bir sunucuda depolanıyorsa, kullanıcı farklı bir sunucuya yönlendirildiğinde oturum bilgileri kaybolur ve kullanıcının tekrar kimlik doğrulaması yapması gerekir. Bu da kötü bir kullanıcı deneyimine ve sunucu tarafında ek yüke yol açar.

Ölçeklenebilir Oturum Yönetimi Stratejileri:

1. Merkezi Oturum Depolama (Centralized Session Storage):
Bu yaklaşım, tüm oturum verilerini ayrı, merkezi bir depolama sisteminde tutar. Bu sayede, uygulamanın farklı sunucuları (web sunucuları veya API gateway'ler) aynı oturum veritabanına erişebilir ve herhangi bir sunucu kullanıcının oturumunu tanıyabilir. Popüler merkezi oturum depolama çözümleri şunlardır:

  • Redis: Yüksek performanslı, bellek içi bir anahtar-değer deposudur. Oturum verilerini önbelleğe almak için idealdir. Düşük gecikme süresi ve yüksek verim sunar.
  • Memcached: Redis'e benzer şekilde bellek içi önbellekleme sistemidir. Daha basit bir yapıya sahiptir ve oturum verileri gibi geçici veriler için kullanılabilir.
  • Veritabanları (Database): Bazı durumlarda, daha kalıcı veya karmaşık oturum verileri için geleneksel ilişkisel (PostgreSQL, MySQL) veya NoSQL (MongoDB, Cassandra) veritabanları kullanılabilir. Ancak, bu genellikle Redis gibi önbellek çözümlerinden daha yavaş olabilir.

Merkezi Depolama Avantajları:

  • Yüksek Ölçeklenebilirlik: Uygulama sunucuları durumsuz hale gelir, bu da kolayca yatay olarak ölçeklenebilecekleri anlamına gelir.
  • Yüksek Erişilebilirlik: Merkezi depolama sistemleri genellikle yedekli ve dağıtık olarak yapılandırılabilir, bu da oturum verilerinin kaybolma riskini azaltır.

2. Yapışkan Oturumlar (Sticky Sessions):
Bu yöntem, bir yük dengeleyicinin (load balancer) aynı kullanıcının sonraki tüm isteklerini, oturumunu başlattığı aynı sunucuya yönlendirmesini sağlar. Böylece, oturum verileri yalnızca o sunucunun belleğinde depolansa bile tutarlılık sağlanır. Yük dengeleyici, kullanıcının ilk isteğindeki oturum kimliğini veya IP adresini kullanarak bu "yapışkanlığı" sağlar.

Yapışkan Oturumlar Avantajları:

  • Uygulama kodunda değişiklik gerektirmez, mevcut oturum yönetimini kullanabilir.
  • Ek bir merkezi depolama sistemi kurma ihtiyacını ortadan kaldırır.

Dezavantajları:

  • Yük Dengesizliği: Bazı sunuculara daha fazla yük binebilir.
  • Sunucu Hatası: Eğer yapışkan oturumun bulunduğu sunucu çökerse, kullanıcı oturumunu kaybeder ve tekrar giriş yapmak zorunda kalır.

3. JWT (JSON Web Tokens) Kullanımı:
Daha önce de bahsedildiği gibi, JWT'ler varsayılan olarak durumsuz bir oturum yönetim yaklaşımı sunar. Oturum bilgisi doğrudan token içinde taşındığı için, sunucuların oturum verilerini depolamasına gerek kalmaz. Herhangi bir sunucu gelen token'ı doğrulayabilir ve işleyebilir.

JWT Avantajları:

  • Doğal Ölçeklenebilirlik: Herhangi bir sunucu token'ı işleyebilir, bu da yatay ölçeklemeyi çok kolaylaştırır.
  • Azaltılmış Sunucu Yükü: Veritabanı veya önbellek sorgularına gerek kalmaz.
  • Mikroservisler İçin İdeal: Farklı servisler aynı token'ı kullanarak kullanıcının kimliğini doğrulayabilir.

JWT Dezavantajları:

  • Token iptali zordur (refresh token mekanizması ile çözülür).
  • Token boyutu her istekle birlikte gönderildiği için bant genişliğini etkileyebilir (genellikle ihmal edilebilir).

Büyük bir sistemde, bu stratejilerin bir kombinasyonu kullanılabilir. Örneğin, API'ler için JWT, daha geleneksel web tabanlı oturumlar için merkezi Redis tabanlı bir depolama. Hatta bazı sistemlerde, kısa ömürlü JWT'ler ile birlikte, Redis'te tutulan refresh tokenları kullanılarak hem ölçeklenebilirlik hem de token iptali kontrolü sağlanır. Seçim, uygulamanın mimarisine, güvenlik gereksinimlerine, trafik yoğunluğuna ve mevcut altyapıya bağlıdır. Ancak temel amaç, her kullanıcının oturumunu hızlı, güvenli ve tutarlı bir şekilde yönetirken, sistemin performansını ve ölçeklenebilirliğini optimize etmektir.

Vaka Analizi: Büyük Ölçekli Bir Uygulamada Oturum Yönetimi

Gerçek Bir Senaryoda Oturum Yönetimi: E-ticaret Platformu Örneği

Bir e-ticaret platformunun büyüme yolculuğunu ve oturum yönetimi kararlarını ele alalım. Başlangıçta küçük bir proje olarak yola çıkan bu platform, zamanla milyonlarca kullanıcıya hizmet veren devasa bir yapıya dönüştü. İlk aşamalarda basit bir oturum yönetim sistemi yeterliyken, kullanıcı sayısı arttıkça ve yeni özellikler eklendikçe, daha karmaşık ve sağlam bir stratejiye ihtiyaç duyuldu.

Başlangıç: Sunucu Taraflı Oturumlar ve Çerezler

Platformun ilk versiyonlarında, geleneksel sunucu taraflı oturumlar kullanıldı. Kullanıcı sisteme giriş yaptığında, sunucu bir session ID oluşturuyor ve bu ID'yi HttpOnly ve Secure bayraklarıyla işaretlenmiş bir çerez aracılığıyla tarayıcıya gönderiyordu. Kullanıcının sepet bilgileri, kimlik doğrulama durumu ve kişisel ayarları, sunucunun yerel dosya sisteminde depolanan oturum dosyaları veya bir ilişkisel veritabanı (MySQL) üzerinde tutuluyordu.

Avantajları: Uygulaması kolay, güvenlik yönetimi sunucu tarafında merkeziydi.
Dezavantajları: Platform büyüdükçe, yük dengeleyicinin arkasına ek sunucular eklendiğinde "yapışkan oturumlar" kullanmak zorunda kalındı. Bu, sunucu arızalarında oturum kaybına ve yük dengesizliğine yol açıyordu. Ayrıca, her sunucunun kendi oturumunu yönetmesi, genel performansı düşürmeye başladı.

Gelişim: Merkezi Oturum Depolama ile Ölçeklenebilirlik

Kullanıcı tabanı ve trafik arttıkça, yapışkan oturumların dezavantajları belirginleşti. Platform, merkezi oturum depolama stratejisine geçmeye karar verdi. MySQL yerine, yüksek performanslı ve bellek içi bir anahtar-değer deposu olan Redis, oturum verilerini depolamak için kullanıldı. Tüm uygulama sunucuları, oturum kimliği ile ilişkilendirilmiş kullanıcı verilerini Redis'ten okuyup yazabiliyordu.

Avantajları: Uygulama sunucuları artık tamamen durumsuz hale geldi ve yatay olarak kolayca ölçeklenebilir hale geldi. Herhangi bir sunucu, kullanıcının oturumunu tanıyabildiği için yük dengeleme daha verimli hale geldi. Sunucu arızaları, Redis'in yüksek erişilebilirlik (HA) yapısı sayesinde oturum kaybına neden olmadı.
Dezavantajları: Redis sunucularının yönetimi ve yedeklemesi için ek bir operasyonel yük oluştu. Her istekte Redis'e yapılan çağrılar, ağ gecikmesine ve Redis sunucularının yoğunluğuna bağlı olarak küçük bir performans maliyeti oluşturabilirdi.

Modernizasyon: Mikroservisler ve Mobil API'ler İçin JWT

Platform, mobil uygulama ve mikroservis mimarisine geçiş yaptığında, geleneksel sunucu taraflı oturumlar yetersiz kalmaya başladı. Mikroservisler arasında kimlik doğrulama ve yetkilendirme bilgilerini taşımak, merkezi oturum depolama ile bile ek karmaşıklık getiriyordu. Bu aşamada, JWT (JSON Web Tokens) devreye girdi.

Uygulama:

  • Kullanıcılar web veya mobil uygulama üzerinden giriş yaptıklarında, yetkilendirme servisi kısa ömürlü bir Erişim Tokenı (örneğin 15 dakika) ve daha uzun ömürlü, HttpOnly ve Secure işaretli bir çerezde saklanan bir Yenileme Tokenı (örneğin 7 gün) veriyordu.
  • Mobil uygulamalar, erişim tokenını cihazın güvenli depolama alanında (örn. Keychain/Keystore) saklarken, web tarafı erişim tokenını localStorage'da (dikkatle ve XSS koruması ile) tutuyordu.
  • Her API isteği, Authorization: Bearer [Access Token] başlığı ile gönderiliyordu.
  • Yetkilendirme kapısı (API Gateway), gelen her isteğin JWT'sini doğruluyor ve token geçerliyse isteği ilgili mikroservise yönlendiriyordu. Mikroservisler, tekrar veritabanına sorgu yapmadan kullanıcının kimlik ve yetki bilgilerini JWT üzerinden okuyabiliyordu.
  • Erişim tokenı süresi dolduğunda, istemci (mobil veya web) yenileme tokenını kullanarak yetkilendirme servisinden yeni bir erişim tokenı talep ediyordu. Yenileme tokenları Redis'te tutuluyor ve gerekirse kara listeye alınarak iptal edilebiliyordu.

Avantajları:

  • Mikroservis Entegrasyonu: Servisler arası kimlik doğrulama ve yetkilendirme sorunsuz hale geldi. Her servis, token'ı bağımsız olarak doğrulayabiliyordu.
  • Yüksek Performans ve Ölçeklenebilirlik: Her istek için veritabanı veya Redis sorgusu yapma ihtiyacı azaldı (sadece yenileme tokenları için Redis kullanılıyordu), bu da API yanıt sürelerini düşürdü ve sistemin yatay olarak daha fazla ölçeklenmesini sağladı.
  • Mobil Desteği: Mobil uygulamalar için doğal ve güvenli bir kimlik doğrulama mekanizması sağlandı.
  • Güvenlik: Kısa ömürlü erişim tokenları ve iptal edilebilir yenileme tokenları kombinasyonu, ele geçirilme riskini yönetilebilir hale getirdi.

Bu vaka analizi, bir e-ticaret platformunun başlangıçtaki basit oturum yönetiminden, büyüyen ihtiyaçlara ve modern mimarilere adapte olmak için nasıl karmaşık ve hibrit bir yapıya geçtiğini göstermektedir. Her aşamada, performans, ölçeklenebilirlik ve güvenlik dengesi gözetilerek doğru teknolojilerin seçilmesi, platformun başarısı için kritik olmuştur.

Oturum Yönetimi Seçenekleri: Uygulamanıza En Uygun Yaklaşım Hangisi?

Bu makale boyunca, web uygulamalarında oturum yönetiminin neden hayati olduğunu, geleneksel çerez tabanlı yaklaşımlardan sunucu taraflı oturumlara ve modern JWT (JSON Web Tokens) çözümlerine kadar farklı stratejileri detaylıca inceledik. Her bir yaklaşımın kendine özgü avantajları ve dezavantajları bulunmaktadır ve uygulamanızın özel gereksinimlerine göre en uygun seçimi yapmak, projenizin başarısı için büyük önem taşır.

Özetle, işte oturum yönetimi seçeneklerinin karşılaştırmalı bir tablosu:

Özellik / Yöntem Çerezler (Sadece İstemci) Sunucu Taraflı Oturumlar JWT (JSON Web Tokens)
Depolama Yeri İstemci (tarayıcı) Sunucu (bellek, disk, Redis vb.) İstemci (token kendi içinde bilgi taşır)
Durum İstemci tarafı durumlu Sunucu tarafı durumlu Durumsuz (server-side stateless)
Ölçeklenebilirlik Yüksek (Veri azsa) Merkezi depolama ile iyi, yapışkan oturumlarla sınırlı Mükemmel (Doğası gereği yatay olarak ölçeklenebilir)
Güvenlik XSS, Oturum Kaçırma riski yüksek (HttpOnly/Secure olmadan) Yüksek (Veri sunucuda kalır), CSRF, Oturum Sabitleme riski var İmza doğrulaması ile yüksek bütünlük, token çalınırsa riskli (kısa ömürlü token/refresh token kombinasyonu ile yönetilir)
Kullanım Alanları Basit tercihler, izleme (HttpOnly olmadan) Geleneksel web uygulamaları, e-ticaret siteleri API'ler, mikroservisler, mobil uygulamalar, SSO (Tek Oturum Açma)
Token İptali Zor (istemciyi beklemelisin) Kolay (sunucudan silinebilir) Zor (kara liste veya refresh token ile çözülür)
Performans Düşük sunucu yükü Merkezi depolama sorgusu maliyeti Çok düşük sunucu yükü (doğrulama dışı)

Uygulamanız için en iyi yaklaşımı seçerken şu soruları göz önünde bulundurmalısınız:

  • Uygulamanızın mimarisi nedir? Geleneksel bir web uygulaması mı, yoksa API odaklı mikroservisler mi kullanıyorsunuz?
  • Hangi platformları destekliyorsunuz? Sadece web tarayıcıları mı, yoksa mobil uygulamalar da mı var?
  • Ölçeklenebilirlik ihtiyaçlarınız ne kadar büyük? Gelecekte ne kadar kullanıcı bekliyorsunuz?
  • Güvenlik hassasiyetiniz ne kadar yüksek? Hangi tür verilere erişiliyor ve ne kadar koruma gerekiyor?
  • Geliştirme ekibinizin tecrübesi ve mevcut altyapınız hangi teknolojilere daha yatkın?

Sonuç olarak, oturum yönetimi stratejisi, uygulamanızın genel güvenlik duruşunu ve performansını doğrudan etkileyen kritik bir karardır. Hiçbir "tek boyut herkese uyan" çözüm yoktur. En iyi yaklaşım genellikle uygulamanın özel gereksinimlerine ve evrimine bağlı olarak bu yöntemlerin bir kombinasyonunu veya hibrit bir modelini kullanmak olabilir. Örneğin, ana web sitesi için merkezi sunucu taraflı oturumlar kullanırken, mobil uygulama ve üçüncü taraf entegrasyonları için JWT tabanlı bir API kimlik doğrulama mekanizması kurmak mantıklı bir hibrit yaklaşım olabilir. Gelecekte WebAuthn gibi parola gerektirmeyen kimlik doğrulama standartları ve daha gelişmiş biyometrik sistemler, oturum yönetiminin dinamiklerini daha da değiştirecektir, ancak temel prensipler her zaman geçerliliğini koruyacaktır.

Sıkça Sorulan Sorular

  • JWT'ler neden localStorage'da saklanmamalıdır?

    JWT'ler localStorage'da saklandığında, XSS (Cross-Site Scripting) saldırılarına karşı savunmasız hale gelirler. Kötü niyetli bir JavaScript kodu, localStorage'a erişerek JWT'yi çalabilir ve saldırganın kullanıcının kimliğine bürünmesine olanak tanır. Daha güvenli bir alternatif, token'ları HttpOnly ve Secure bayraklarıyla işaretlenmiş çerezlerde saklamaktır, bu da JavaScript erişimini engeller. Ancak bu durumda da CSRF koruması gereklidir.

  • Refresh token mekanizması JWT güvenliğini nasıl artırır?

    Refresh token mekanizması, kısa ömürlü erişim tokenları ve daha uzun ömürlü yenileme tokenları kullanarak JWT güvenliğini artırır. Erişim tokenları kısa sürede (örneğin 15-30 dk) geçerliliğini yitirdiği için, ele geçirseler bile kötüye kullanım süresi kısıtlıdır. Yenileme tokenları ise daha güvenli bir şekilde (örn. HttpOnly çerezde veya mobil cihazın güvenli deposunda) saklanır ve sadece yeni bir erişim tokenı almak için kullanılır. Yenileme tokenları sunucu tarafında yönetildiği için, şüpheli durumlarda kolayca iptal edilebilir, bu da "token iptali" sorununa çözüm sunar.

  • CSRF saldırıları çerez tabanlı oturumları nasıl etkiler?

    CSRF (Cross-Site Request Forgery) saldırıları, kullanıcının tarayıcısının otomatik olarak ilgili alan adına ait çerezleri (oturum kimliğini içerenler dahil) göndermesi prensibini sömürür. Saldırgan, kullanıcının oturum açmış olduğu bir web sitesine yönelik kötü niyetli bir istek oluşturur ve bu isteği kullanıcıya göndermesini sağlar (örneğin bir resim etiketi veya gizli bir form aracılığıyla). Tarayıcı, isteği gönderirken ilgili çerezleri de eklediği için, sunucu isteğin meşru bir kullanıcıdan geldiğini düşünür ve işlemi gerçekleştirir. Bu nedenle CSRF tokenları veya SameSite çerez politikası gibi önlemler kritiktir.

  • Mobil uygulamalar için neden çerez yerine JWT tercih edilmeli?

    Mobil uygulamalar genellikle web tarayıcısı bağlamından bağımsız çalıştığı için çerezlerin otomatik yönetiminden faydalanamazlar. Çerezleri manuel olarak yönetmek karmaşıktır ve platformlar arası tutarlılık sağlamayı zorlaştırır. JWT'ler ise platformdan bağımsızdır, kolayca HTTP başlıklarında taşınabilir ve API odaklı iletişim için çok daha uygundur. Ayrıca, JWT'ler API çağrıları için doğal olarak durumsuz bir yapı sunar, bu da mikroservis mimarileri ve ölçeklenebilirlik açısından avantaj sağlar.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık