İnternet dünyasında uygulamalar artık tek başlarına birer ada değil, birbirlerine API’lar (Uygulama Programlama Arayüzleri) ile bağlı devasa bir ağın parçaları. Ancak bu bağlantılar, aynı zamanda saldırganlar için de birer giriş kapısı niteliğinde. Uygulamanızın backend’i ile frontend’i veya iki farklı sunucu arasında veri transferi yaparken “en güvenli” yolu seçmek, sadece bir tercih değil, bir zorunluluktur.
Bu yazıda, modern dünyada API güvenliğinin temel direkleri olan JWT, OAuth2 ve API Key yapılarını, bir uzmanın gözünden ama herkesin anlayabileceği bir dille inceleyeceğiz.
Authentication vs Authorization: En Çok Karıştırılan İkili
Güvenliğe girmeden önce şu iki kavramı netleştirelim:
- Authentication (Kimlik Doğrulama): “Sen kimsin?” sorusuna yanıt verir. Kullanıcının gerçekten söylediği kişi olduğunu (şifre, biyometrik vb. ile) kanıtlamasıdır.
- Authorization (Yetkilendirme): “Sen ne yapabilirsin?” sorusuna yanıt verir. Kimliği doğrulanan kişinin, hangi dosyalara veya verilere erişme izni olduğunu belirler.
İyi bir API güvenliği, her iki sorunun da hatasız yanıtlanmasını gerektirir.
JWT (JSON Web Token): Cebinizdeki Kimlik Kartı
JWT, bugün web dünyasında en çok kullanılan kimlik doğrulama yöntemidir. Temelde üç parçadan oluşur: Header, Payload ve Signature. Bir kullanıcı giriş yaptığında sunucu ona bir JWT verir ve kullanıcı her isteğinde bu token’ı sunucuya geri gönderir.
JWT Kullanırken Dikkat Edilmesi Gerekenler:
- Hassas Bilgi Taşımayın: JWT içeriği (payload) teknik olarak herkes tarafından okunabilir. Şifre veya gizli verileri asla token içine koymayın.
- Token Refresh Stratejisi: Token’lar sonsuza kadar geçerli olmamalıdır. Kısa ömürlü bir
access tokenve bu süresi dolunca yeni bir tane almayı sağlayanrefresh tokenyapısı kurmak, güvenliğin altın kuralıdır. - Güvenli Depolama: Frontend tarafında token’ları
LocalStorageiçinde saklamak XSS saldırılarına kapı açar. En güvenli yöntem,HttpOnly Cookiekullanmaktır.
OAuth2: “Benim Adıma Bu İşi Yap”
Eğer bir uygulama, kullanıcının izniyle başka bir servise (örneğin Google takviminize) erişmek istiyorsa devreye OAuth2 girer. OAuth2 aslında bir kimlik doğrulama protokolü değil, bir yetkilendirme çerçevesidir.
Kullanıcı şifresini üçüncü taraf uygulamaya vermez; bunun yerine ana platformdan (Google/Facebook) bir “erişim izni” (token) alır. Bu sayede, uygulamanız çalınsa bile kullanıcının ana şifresi güvende kalır. Modern uygulamalarda “Google ile giriş yap” butonu arkasında yatan sihir budur.
API Key Güvenliği: Sunucular Arası Güven
API Key’ler genellikle kullanıcı bazlı değil, uygulama bazlı kimlik doğrulama için kullanılır. Örneğin, bir hava durumu servisinden veri çekmek için size verilen özel anahtar bir API Key’dir.
API Key Hataları: En büyük hata, bu anahtarı frontend tarafındaki JavaScript koduna gömmektir. Eğer anahtar tarayıcıda gözüküyorsa, herkes onu sizin adınıza kullanabilir ve faturanızı kabartabilir. API anahtarları her zaman backend tarafında (Environment Variables içinde) tutulmalı ve istemciye asla sızdırılmamalıdır.
Güvenlik Katmanları: Sadece Token Yetmez
API’nizi korumak için sadece anahtarlar ve token’lar yeterli değildir. Şu üç savunma hattı hayat kurtarır:
- Rate Limiting: Bir kullanıcının veya IP adresinin dakikada kaç istek atabileceğini sınırlayın. Bu, hem Brute Force saldırılarını hem de DoS (Hizmet Engelleme) saldırılarını engeller.
- Security Headers: API yanıtlarınıza
CORS,X-Content-Type-OptionsveContent-Security-Policygibi başlıklar ekleyerek tarayıcı tabanlı saldırıları durdurun. - Input Validation: “Kullanıcıdan gelen her veri zehirlidir” felsefesini benimseyin. Gelen her parametreyi kontrol edin ve temizleyin (sanitization).
Sonuç Olarak
API güvenliği bir kerelik bir ayar değil, sürekli izlenmesi gereken bir süreçtir. JWT’nizi kısa ömürlü tutun, OAuth2 protokollerine sadık kalın ve API anahtarlarınızı bir sır gibi saklayın. Unutmayın, en güvenli API, en az yetkiyle en çok işi yapan API’dır.


