Mehmet Fatih İçin

.NET ile Güvenli REST API Tasarımı: JWT, Rol Tabanlı Yetki ve Rate Limiting

Mehmet Fatih İçin · · 8 dk okuma

Birden çok iç sistemin ve dış paydaşın aynı veriye eriştiği kurumsal ortamlarda ortak bir API katmanı kurmak hem bakım hem de güvenlik açısından büyük kazanç sağlar. Aşağıdaki maddeler, üretimde çalışan bir API platformunda uyguladığım temel prensipler.

1. Kimlik doğrulama: kısa ömürlü JWT + yenileme

  • Erişim token'larını kısa ömürlü tut (ör. 15 dakika); uzun oturum için yenileme (refresh) token kullan ve sunucu tarafında iptal edilebilir sakla.
  • İmzayı asimetrik anahtarla (RS256/ES256) at; doğrulayan servislerin özel anahtara ihtiyacı olmaz.
  • ValidateIssuer, ValidateAudience, ValidateLifetime ayarlarını kapatma; ClockSkew'u küçült.

2. Yetkilendirme: rol yerine policy düşün

builder.Services.AddAuthorization(o =>
{
    o.AddPolicy("BiletIade", p => p.RequireRole("Gise", "Yonetici")
                                  .RequireClaim("birim"));
});

app.MapPost("/api/bilet/{id}/iade", IadeEt)
   .RequireAuthorization("BiletIade");

Policy'ler iş kurallarını tek yerde toplar. Kayıt bazlı kontrolleri (kullanıcı sadece kendi biriminin verisini görebilir) IAuthorizationHandler ile ekle; bunu endpoint içinde unutulmaya bırakma.

3. Rate limiting

builder.Services.AddRateLimiter(o =>
{
    o.RejectionStatusCode = 429;
    o.AddPolicy("istemci", ctx => RateLimitPartition.GetFixedWindowLimiter(
        ctx.User.FindFirst("client_id")?.Value ?? ctx.Connection.RemoteIpAddress?.ToString(),
        _ => new FixedWindowRateLimiterOptions { PermitLimit = 100, Window = TimeSpan.FromMinutes(1) }));
});

Limitleri IP yerine istemci kimliğine göre bölmek, aynı NAT arkasındaki kullanıcıların birbirini engellemesini önler.

4. Girdi doğrulama ve hata yönetimi

  • Her DTO'yu doğrula; veritabanı hatalarını istemciye aynen döndürme. ProblemDetails standardını kullan.
  • SQL'i her zaman parametreli çalıştır; dinamik sıralama/filtre alanlarını beyaz listeyle sınırla.

5. Gözlemlenebilirlik

Her isteğe korelasyon kimliği ver, kim-neyi-ne zaman yaptı bilgisini denetim (audit) tablosuna yaz. Kişisel verileri (T.C. kimlik no, telefon) loglarda maskele — KVKK açısından da zorunlu.

6. Swagger'ı üretimde koru

API dokümantasyonu geliştirme ortamında büyük kolaylık; üretimde ya kapat ya da kimlik doğrulama arkasına al.

İş birliği

Kurumsal API, entegrasyon (e-Devlet, KPS, banka/POS) ve .NET mimari danışmanlığı için Hizmetler sayfasına göz atabilirsin.

Diğer yazılar