Teknoloji

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.

Semih AKBAŞ
3 dk okuma 9 0
API Güvenliği: JWT, OAuth ve En İyi Uygulamalar

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 CodeWeb uygulamaları (en güvenli)
PKCEMobil ve SPA uygulamaları
Client CredentialsSunucudan sunucuya iletişim
Device CodeEkransı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

  1. ✅ HTTPS zorunlu kılın
  2. ✅ JWT token'larda kısa süre (1 saat) kullanın
  3. ✅ Refresh token mekanizması uygulayın
  4. ✅ Rate limiting aktifleştirin
  5. ✅ Tüm girdileri doğrulayın
  6. ✅ CORS politikasını kısıtlayın
  7. ✅ API yanıtlarında hassas veri göstermeyin
  8. ✅ Loglama ve izleme uygulayın
  9. ✅ API versiyonlama kullanın
  10. ✅ 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.

Semih AKBAŞ

Semih AKBAŞ

Yazılım geliştirici. Web, mobil ve masaüstü uygulamalar geliştiriyorum.

Yorumlar (0)

Henüz yorum yok. İlk yorumu siz yapın!