API Güvenliği — Token Tabanlı Kimlik Doğrulama

Çağlar GÜL
Çağlar GÜL | Blog
3 min readMay 16, 2021

Merhaba arkadaşlar. Bugün sizlere API lerde kimlik doğrulama yöntemlerinden biri olan token tabanlı kimlik doğrulama yöntemiyle ilgili bilgilendirme yazısı paylaşacağım.

Giriş

Token (jeton) tabanlı kimlik doğrulama, günümüzde web’in her yerinde öne çıkıyor. API kullanan her web şirketinin çoğunda tokenlar, birden çok kullanıcı için kimlik doğrulamasını gerçekleştirmenin en iyi yoludur.

Uygulamanız için token tabanlı kimlik doğrulamasını seçerken çok önemli bazı faktörler vardır.

  • Stateless (durumsuz) ve ölçeklenebilir sunucular
  • Mobil uygulama uyumluluğu
  • Kimlik doğrulamayı diğer uygulamalara aktarma
  • Ekstra güvenlik

Tokenlar neden ortaya çıktı?

Token tabanlı kimlik doğrulamanın nasıl çalıştığını ve faydalarını görmeden önce, geçmişte kimlik doğrulamanın nasıl yapıldığına bakmalıyız.

Sunucu Tabanlı Kimlik Doğrulama (Geleneksel Yöntem)

HTTP protokolü durumsuz (stateless) olduğundan bir kullanıcının kimliğini doğruladığımızda, sonraki talepte uygulamamızın kim olduğumuzu bilmeyeceği anlamına gelir. Tekrar doğrulamamız gerekecekti.

Uygulamalarımızın kim olduğumuzu hatırlamasının geleneksel yolu, oturum açmış kullanıcı bilgilerini sunucuda saklamaktır. Bu oturumda birkaç farklı şekilde yapılabilir, genellikle bellekte veya diskte depolanır.

Web, uygulamalar ve mobil uygulamanın yükselişi ortaya çıktıkça, bu kimlik doğrulama yöntemi özellikle ölçeklenebilirlik konusunda sorunlar göstermiştir.

Sunucu Tabanlı Kimlik Doğrulamayla İlgili Sorunlar

Sessions: Bir kullanıcının kimliği her doğrulandığında, sunucunun sunucumuzda bir yerde bir kayıt oluşturması gerekecektir. Bu genellikle bellekte yapılır ve kimlik doğrulaması yapan çok sayıda kullanıcı olduğunda, sunucunuzdaki ek yük artar.

Ölçeklenebilirlik: Oturumlar bellekte depolandığından, bu ölçeklenebilirlikle ilgili sorunlar sağlar. Bulut sağlayıcılarımız, uygulama yükünü idare etmek için sunucuları çoğaltmaya başladığında, session (oturum) belleğinde önemli bilgilere sahip olmak ölçeklendirme yeteneğimizi sınırlayacaktır.

CORS: Cokkies (çerez) normalde tek bir alanda çalışır. Örneğin, jabs.com gibi bir alandan bir boo.com alanına çerez okumak veya göndermek imkansızdır. Bu, API hizmeti mobil ve web platformları için farklı alanlardan olduğunda bir sorundur.

CSRF: Siteler arası istek sahteciliği saldırısına karşı savunmasızdır. Koruma için genellikle CSRF belirteçleri gibi diğer güvenlik önlemlerine ihtiyaç duyar.

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

Token tabanlı kimlik doğrulama stateless (durumsuz)dir. Kullanıcımız hakkında herhangi bir bilgiyi sunucuda veya bir oturumda saklamıyoruz.

Bu kavram tek başına, sunucuda bilgi depolamak zorunda kalma ile ilgili birçok sorunun üstesinden gelir.

Session bilgisi olmaması uygulamanızın bir kullanıcının nerede oturum açtığı konusunda endişelenmeden gerektiği şekilde ölçeklendirebileceği anlamına gelir.

Token Tabanlı Kimlik Doğrulamanın örnek implementasyonu aşağıdaki gibidir.

  1. Kullanıcı Adı / Parola ile Erişim Talep edilir.
  2. Uygulama kimlik bilgilerini doğrular
  3. Uygulama, istemciye imzalı bir token döner.
  4. İstemci bu tokenı depolar ve her istekle birlikte gönderir.
  5. Sunucu belirteci doğrular ve verilerle yanıt verir.

Her bir istek token ile birlikte gönderilmelidir. Bu tokenlar HTTP başlığında gönderilmelidir. Ayrıca sunucumuzu Access-Control-Allow-Origin: * kullanarak tüm etki alanlarından gelen istekleri kabul edecek şekilde ayarlamamız gerekecek.

Token Tabanlı Kimlik Doğrulamanın Avantajları

  1. Token tabanlı kimlik doğrulama daha verimlidir. Tokenlar durum bilgisiz olduğundan ve yalnızca kullanıcı tarafında saklanmaları gerektiğinden, daha ölçeklenebilir bir çözümdür. Sunucunun yapması gereken tek şey, belirteçleri oluşturmak ve doğrulamaktır ve bilgilerin kendisinin asla depolanması gerekmez. Bu, web sitesinde aynı anda daha fazla kullanıcıyı tutabileceğiniz anlamına gelir.
  2. Token tabanlı kimlik doğrulama daha esnektir. Tokenler birden çok sunucuda kullanılabilir, ayrıca farklı web sitelerinde, web uygulamalarında veya mobil uygulamalarda aynı anda kimlik doğrulama sağlarlar. Bu, şirketler ve platformlar arasında daha fazla işbirliği fırsatı sağlar.
  3. Tokenlar mobil uygulamalar için çok uygundur. Aslında tokenlar, mobil uygulamalarda tanımlama bilgilerinden çok daha kolaydır çünkü tokenlar, tam olarak hangi cihazların erişime sahip olduğunu kontrol etmenize olanak tanır.
  4. Tokenlar daha güvenli bir kimlik doğrulama yöntemidir, çünkü token hiçbir hassas bilgiyi saklamaz. Bunun yerine token, kullanıcının kimlik bilgileri için bir yer tutucu görevi görür. Token sunucu, web uygulaması ve kullanıcının tarayıcısı arasında gidip gelirken, kullanıcının kimlik bilgilerinin tehlikeye atılma riski asla yoktur.
  5. Tokenlar, ölçeklenebilirlik için harikadır. Sunucunuzun bir token oluşturması gerekecek, ancak söz konusu tokeni hiçbir zaman herhangi bir yerde saklaması gerekmeyecektir. Tüm kullanıcı meta verileri doğrudan tokenın kendisine kodlanır, böylece ağınızdaki herhangi bir makine herhangi bir kullanıcıyı doğrulayabilir. Sunucu ve istemci tokenı sonsuza kadar ileri geri iletebilir ve hiçbir kullanıcı veya oturum verisini saklamaz.
  6. Tokenlar, mobil kullanıma hazır bir backend ile birlikte gelir. Bir mobil uygulamada kimlik doğrulama için token kullanmak, API’nize hangi mobil cihazların eriştiğini kolayca ve güvenli bir şekilde kontrol etmenizi sağlar Yalnızca iOS veya Android’deki çerezlerden daha kolay kullanılmaları değil, aynı zamanda geliştirici ekibinizin fazladan çaba harcamasına gerek kalmadan uygulamanızın birden çok arka uca yönelik istekleri doğrulamasına da olanak tanır.

--

--

Çağlar GÜL
Çağlar GÜL | Blog

elektrik-elektonik mühendisi | yazılıma ve tasarıma meraklı | araştırmayı ve paylaşmayı seven | blogger ve oyun sevdalısı