Modern backend dünyasında artık tek bir uygulama değil; birbirleriyle konuşan, bağımsız deploy edilebilen servisler konuşuluyor. IdentityServer, JWT ve Mikroservis mimarisi; kurumsal ölçekte güvenli, ölçeklenebilir ve profesyonel backend sistemlerinin temel taşlarından biri haline gelmiş durumda.

Bu yazıda yer alan mimariyi zihninizde canlandırmanız için üstteki görseli düşünebilirsiniz: Ortada kimlik ve yetkilendirme merkezi, etrafında token ile konuşan mikroservisler ve bu yapıyı saran güvenli bir iletişim ağı. Ancak mikroservis sayısı arttıkça kimlik doğrulama (authentication) ve yetkilendirme (authorization) konuları mimarinin en kritik parçalarından biri haline geliyor.

Bu noktada IdentityServer ve JWT (JSON Web Token), mikroservis mimarisinde güvenliğin omurgasını oluşturan iki temel yapı olarak karşımıza çıkıyor.

Bu yazıda hem mimari bakış açısını hem de gerçek .NET kod örneklerini birleştirerek IdentityServer, JWT ve Mikroservis mimarisini modül modül, üretim ortamına yakın bir yaklaşımla ele alacağız

🛡️Mikroservis Mimarilerinde Güvenlik Problemi

Mikroservis mimarisinde her servis:

  • Kendi veritabanına sahiptir
  • Bağımsız olarak deploy edilir
  • Tek bir iş sorumluluğunu üstlenir

Bu yapı esneklik sağlarken şu temel soruyu da beraberinde getirir:

🧠 Kullanıcı kimliğini kim doğrulayacak ve diğer servisler bunu nasıl güvenilir şekilde bilecek?

Her mikroservisin kendi içinde kullanıcı doğrulaması yapması:

  • Kod tekrarına
  • Güvenlik açıklarına
  • Yönetilemeyen karmaşıklığa

neden olur. Bu yüzden mikroservis mimarilerinde merkezi bir kimlik doğrulama servisi kaçınılmazdır.

🧩Mimari Genel Bakış

Bu yazı boyunca ele alacağımız örnek mimari şu bileşenlerden oluşur:

  • IdentityServer → Kimlik doğrulama ve token üretimi
  • JWT → Servisler arası güvenli ve stateless iletişim
  • API Gateway (opsiyonel) → Merkezi giriş ve güvenlik katmanı
  • Mikroservisler → User, Order, Product vb.

Mikroservisler kullanıcıyı tanımaz, token'ı tanır.

🔑IdentityServer Nedir?

IdentityServer, OAuth 2.0 ve OpenID Connect standartlarını destekleyen bir Identity Provider (Kimlik Sağlayıcı) çözümüdür.

Temel sorumlulukları:

  • Kullanıcı kimlik doğrulaması
  • Access Token üretimi
  • Yetkilendirme kurallarının merkezi yönetimi

Mikroservis mimarisinde güvenliğin tek bir noktadan yönetilmesini sağlar.

IdentityServer Kurulumu

📦Gerekli NuGet Paketleri

dotnet add package Duende.IdentityServer
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore

Program.cs — Temel Konfigürasyon

builder.Services.AddIdentityServer()
    .AddInMemoryClients(Config.Clients)
    .AddInMemoryApiScopes(Config.ApiScopes)
    .AddInMemoryIdentityResources(Config.IdentityResources)
    .AddTestUsers(TestUsers.Users);

Production ortamlarında InMemory yerine veritabanı tercih edilmelidir.

Client ve Scope Tanımları

public static IEnumerable<ApiScope> ApiScopes => new List<ApiScope>
{
    new ApiScope("catalog_api", "Catalog API")
};
public static IEnumerable<Client> Clients => new List<Client>
{
    new Client
    {
        ClientId = "client_app",
        AllowedGrantTypes = GrantTypes.ClientCredentials,
        ClientSecrets = { new Secret("secret".Sha256()) },
        AllowedScopes = { "catalog_api" }
    }
};

Bu yapı sayesinde:

  • Client hangi API'ye erişebileceğini bilir
  • Yetkilendirme scope bazlı yapılır

🪪JWT (JSON Web Token) Nedir?

JWT, kullanıcıya veya client'a ait bilgilerin imzalanmış ve taşınabilir bir token içinde saklanmasını sağlayan bir standarttır.

Bir JWT üç bölümden oluşur:

  1. Header → Algoritma bilgisi
  2. Payload → Claim ve scope bilgileri
  3. Signature → Token bütünlüğü

JWT'nin en büyük avantajı stateless olmasıdır. Sunucu tarafında session tutulmaz.

🧾Token Akışı (Authentication Flow)

  1. Client, IdentityServer'a kimlik doğrulama isteği gönderir
  2. IdentityServer doğrulama yapar
  3. Başarılı olursa JWT Access Token üretir
  4. Client bu token ile mikroservislere istek atar

Örnek token payload:

{
  "iss": "https://localhost:5001",
  "scope": "catalog_api",
  "exp": 1710000000
}

Mikroservis Tarafında JWT Doğrulama

Program.cs

builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer("Bearer", options =>
    {
        options.Authority = "https://localhost:5001";
        options.TokenValidationParameters.ValidateAudience = false;
    });
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("CatalogPolicy", policy =>
    {
        policy.RequireClaim("scope", "catalog_api");
    });
});

Endpoint Yetkilendirme

[Authorize(Policy = "CatalogPolicy")]
[HttpGet]
public IActionResult GetProducts()
{
    return Ok("Yetkili erişim başarılı");
}
  • Token yoksa → 401 Unauthorized 🔑❌
  • Scope yoksa → 403 Forbidden🚫

🚪API Gateway Kullanımı

API Gateway:

  • Token doğrulamasını merkezi yapar
  • Yetkisiz istekleri mikroservislere ulaşmadan engeller
  • Logging ve rate limiting sağlar

Bu sayede mikroservisler yalnızca iş mantığına odaklanır.

✅Avantajlar

  • Merkezi kimlik yönetimi🪪🔐
  • Mikroservis bağımsızlığı
  • Yüksek performans (stateless yapı)⚡
  • OAuth 2.0 / OpenID Connect uyumluluğu

🔍Sonuç

Mikroservis mimarisinde güvenlik, sonradan eklenen bir detay değil, mimarinin temel bir parçasıdır.

IdentityServer ve JWT birlikte kullanıldığında:

  • Güvenli
  • Ölçeklenebilir
  • Kurumsal

bir mikroservis altyapısı ortaya çıkar.

.NET ekosisteminde profesyonel mikroservis mimarileri hedefliyorsanız, IdentityServer + JWT ikilisi güçlü ve doğru bir tercihtir.🚀