API Güvenliği: JWT, OAuth ve En İyi Uygulamalar
Modern API'lerin güvenliği, kullanıcı kimlik doğrulama ve yetkilendirme mekanizmalarını doğru uygulamaktan geçer. JWT, OAuth 2.0 ve API güvenliği en iyi uygulamalarını öğrenin.
API Güvenliği Neden Önemli?
API'ler modern uygulamaların omurgasıdır. Mobil uygulamalar, web siteleri, IoT cihazları ve üçüncü parti servisler API'ler aracılığıyla iletişim kurar. Güvensiz bir API, tüm sisteminizi tehlikeye atar.
2023 yılında gerçekleşen veri ihlallerinin %40'ından fazlası API güvenlik açıklarından kaynaklanmıştır.
Kimlik Doğrulama Yöntemleri
1. API Key
En basit yöntemdir ancak tek başına yeterli değildir:
# API Key ile istek
curl -H "X-API-Key: abc123xyz789" \
https://api.example.com/users
2. JWT (JSON Web Token)
JWT, kullanıcı kimliğini güvenli şekilde taşıyan self-contained token'lardır:
// JWT oluşturma (Node.js)
const jwt = require("jsonwebtoken");
const token = jwt.sign(
{ userId: 123, role: "admin" },
process.env.JWT_SECRET,
{ expiresIn: "1h" }
);
// JWT doğrulama
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
console.log(decoded.userId); // 123
} catch (err) {
console.log("Token geçersiz!");
}
JWT, üç parçadan oluşur:
- Header: Algoritma ve token türü
- Payload: Kullanıcı verileri (claims)
- Signature: Token bütünlüğünü doğrulayan imza
3. OAuth 2.0
Üçüncü parti uygulamaların kullanıcı adına kaynaklara erişmesini sağlayan yetkilendirme çerçevesidir. "Google ile Giriş Yap" gibi özellikler OAuth 2.0 kullanır.
OAuth 2.0 akış türleri:
| Akış | Kullanım Alanı |
|---|---|
| Authorization Code | Web uygulamaları (en güvenli) |
| PKCE | Mobil ve SPA uygulamaları |
| Client Credentials | Sunucudan sunucuya iletişim |
| Device Code | Ekransız cihazlar (TV, IoT) |
API Güvenliği En İyi Uygulamaları
Rate Limiting
// Express.js ile rate limiting
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 dakika
max: 100, // Maksimum istek
message: "Çok fazla istek. Lütfen bekleyin."
});
app.use("/api/", limiter);
Input Validasyonu
// Joi ile input validation
const Joi = require("joi");
const userSchema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(8).max(128).required(),
name: Joi.string().min(2).max(100).required()
});
const { error, value } = userSchema.validate(req.body);
if (error) return res.status(400).json({ error: error.details });
Güvenlik Kontrol Listesi
- ✅ HTTPS zorunlu kılın
- ✅ JWT token'larda kısa süre (1 saat) kullanın
- ✅ Refresh token mekanizması uygulayın
- ✅ Rate limiting aktifleştirin
- ✅ Tüm girdileri doğrulayın
- ✅ CORS politikasını kısıtlayın
- ✅ API yanıtlarında hassas veri göstermeyin
- ✅ Loglama ve izleme uygulayın
- ✅ API versiyonlama kullanın
- ✅ Güvenlik başlıklarını ekleyin (CSP, HSTS, X-Frame-Options)
⚠️ Kural: API güvenliği, güvenlik duvarının arkasına saklanmak değildir. Her katmanda savunma (defense in depth) prensibini uygulayın.
Yorumlar (0)
Henüz yorum yok. İlk yorumu siz yapın!