.NET Core Middleware Nedir ve Nasıl Kullanılır?

.NET Core Middleware Nedir ve Nasıl Kullanılır?

Bu makale, NET Core'da kullanılan middleware kavramını ele alarak, HTTP taleplerinin nasıl işleneceği konusunda bilgi vermektedir Middleware, bir uygulamanın HTTP pipeline'ında yer alan bir katman olarak, istekleri ele almak ve cevapları oluşturmak için kullanılır Bu middleware'ler, authentication, authorization, logging ve exception handling işlevleri gibi farklı nedenlerle kullanılabilir Middleware'lere bu işlevleri sağlayabilmesi için configure metodunu kullanarak sıralama belirlenir Authentication ve authorization işlevleri için NET Core built-in middleware'ları kullanılabilir Cookie authentication middleware, kullanıcıların kimlik bilgilerini depolamak için bir cookie kullanırken, JWT authentication middleware ise JSON Web Token kullanır Middleware kullanarak, uygulamanızda güvenliği sağlayabilir ve kullanıcıların kimlik doğrulama ve yetkilendirme işlemlerini daha tutarlı hale getirebilirsiniz

.NET Core Middleware Nedir ve Nasıl Kullanılır?

.NET Core, geliştiricilere HTTP taleplerini işlemek için bir dizi middleware sağlar. Middleware, istekleri ele almak ve cevapları oluşturmak için kullanılır. Bu makalede, .NET Core middleware kavramı üzerinde durarak, middleware'ların ne olduğu ve nasıl kullanılabileceği hakkında bilgi vereceğiz.

Middleware, bir ASP.NET Core uygulamasını oluşturan katmanlardan biridir. Middleware'ler, HTTP pipeline'ının bir parçasıdır ve HTTP taleplerinin yaşam döngüsünde çeşitli işlemleri gerçekleştirmek için kullanılır. Bu işlemler, authentication, authorization, logging, exception handling ve diğer işlevler olabilir. Kısacası, middleware'ler, talepleri işlemek için birçok farklı nedenle kullanılabilir.

Middleware'ların ne olduğunu öğrendikten sonra, nasıl kullanılacağına geçebiliriz. .NET Core'da middleware kullanmak oldukça kolaydır. Kullanılacak middleware'ı belirleyip, HTTP pipeline'ı üzerinde kullanmak yeterlidir. Bu pipeline, işlemlerin sırasını belirler ve isteklerin nereye yönlendirileceğini belirler. Bu nedenle, middleware'leri belirlemenin yanı sıra, pipeline içerisindeki sıralarını doğru belirlemek de oldukça önemlidir.


Middleware Nedir?

Middleware, bir ağ ya da sistem bileşenleri arasındaki iletişimi sağlayan yazılım parçacıklarına verilen isimdir. .NET Core'da, HTTP taleplerini işlemek için bir dizi middleware kullanılır. Her middleware, gelen talepleri işleyebilmek için önceden belirlenmiş bir işlevi yerine getirir. Middleware'lar, sırayla çalışır ve her biri önceki middleware'de gerçekleştirilen değişiklikleri alıp sonraki işlem için kullanabilir.

Middleware'lar, davranışlarını configure metodunu kullanarak belirlenen sıralamada gerçekleştirir. Bu sıralama, uygulamanın davranışını değiştirmek için de kullanılır. Örneğin, middleware'ların her birinin eklediği davranışları silmek veya sırayı değiştirmek gibi.


Middleware Kullanarak Authentication ve Authorization Nasıl Yapılır?

.NET Core'da authentication ve authorization işlevleri için middleware kullanılır. Authentication, HTTP talebini yapan kullanıcının kimliğinin doğrulanmasıdır. Authorization ise HTTP talebinin belirli bir işlem veya kaynağa erişim iznine sahip olup olmadığını kontrol etmektir.

Authentication için .NET Core'un sunduğu built-in middleware'ları kullanabilirsiniz. Örneğin, Cookie Authentication Middleware kullanarak kullanıcılardan gelen kimlik bilgilerini bir cookie içinde saklayabilirsiniz. Aynı şekilde, JWT Authentication Middleware kullanarak kullanıcılara özel token sağlayabilirsiniz.

Authorization işlevi için ise, Policy-Based Authorization Middleware kullanabilirsiniz. Bu middleware ile, belirli politikalara göre kullanıcılara erişim izni verebilirsiniz. Ayrıca, .NET Core'da yapılandırılabilir Role-Based Authorization Middleware de bulunmaktadır.

Middleware kullanarak authentication ve authorization işlevleri, .NET Core uygulamanızda güvenliği sağlamak için önemlidir. Bu sayede, kullanıcıların kimlik doğrulama ve yetkilendirme işlemleri daha güvenli ve tutarlı hale getirilebilir.


Authentication Middleware Kullanımı

Authentication middleware, kullanıcının kimliğini doğrulamak ve isteği kullanıcının kimliği altında işlemek için kullanılır. Bu sayede kullanıcıların uygulamaya giriş yapması sağlanır. .NET Core 'un authentication middleware'ları arasında, cookie ve JWT authentication middleware'ları bulunur.

Cookie authentication middleware, kullanıcıların kimlik bilgilerini depolamak için bir cookie kullanır. Kullanıcının login olduğunda, cookie middleware kullanılarak kullanıcıya özel bir cookie oluşturulur ve bu cookie, kullanıcının kimliği hakkında bilgi taşır. Daha sonra her istek geldiğinde, cookie middleware kullanılarak bu cookie okunur ve kullanıcının kimliği doğrulanır.

JWT authentication middleware, JSON Web Token (JWT) kullanır. Bu sayede kullanıcılara bir token sağlanır ve bu token ile authentication yapılır. Kullanıcının login olduğunda, JWT token generator tarafından oluşturulur ve kullanıcının kimliği hakkında bilgiler içerir. Daha sonra her istek geldiğinde, JWT middleware kullanılarak bu token okunur ve kullanıcının kimliği doğrulanır.

Authentication middleware kullanımında en önemli nokta, kullanıcının gerekli kimlik bilgilerine nasıl erişileceğinin belirlenmesidir. Bu nedenle, uygulamanızın gereksinimlerine göre uygun bir authentication middleware seçmeniz gereklidir.


Cookie Authentication Middleware Kullanımı

Cookie authentication middleware, kullanıcıların kimlik bilgilerini depolamak için bir cookie kullanır. Bu middleware, kullanıcının kimlik bilgilerinin güvenli bir şekilde depolanmasını sağlar. Ayrıca, kullanıcıların oturum açmalarını, oturumları açıkken gezinti yapmalarını veya oturumlarını kapattıklarında oturumlarının sonlandırılmasını sağlar. Cookie authentication middleware kullanarak authentication nasıl yapılacağı aşağıdaki adımlarla açıklanmaktadır:

  • Microsoft.AspNetCore.Authentication.Cookies NuGet paketini yükleyin
  • Startup.cs dosyasındaki ConfigureServices() yönteminde aşağıdaki kodu ekleyin:
       services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)          .AddCookie(options =>          {            options.LoginPath = "/Account/Login";            options.AccessDeniedPath = "/Account/AccessDenied";          });  
  • Configure() yönteminde şu kodu ekleyin:
       app.UseAuthentication();  
  • Authentication yapılacak olan Actions'a AuthorizeAttribute ekleyin:
  •    [Authorize]   public IActionResult AuthenticationAction()   {       //authentication işlemleri   }  

Böylece, Cookie Authentication Middleware kullanarak, kullanıcının kimlik bilgileri güvenli bir şekilde depolanır ve kullanıcının oturum açması, gezinmesi veya oturumunu kapatması mümkün olur.


JWT Authentication Middleware Kullanımı

=

JSON Web Token (JWT) authentication middleware, kullanıcılara özel token sağlar. Bu token, kullanıcının kimliğini doğrulamak için kullanılabilir. Bu yöntem, daha güçlü bir authentication mekanizması sunar ve session bazlı authentication yöntemlerine kıyasla daha esnek bir yapıya sahiptir. JWT authentication middleware kullanarak authentication yapmak oldukça basittir. Middleware, kullanıcının token'ını doğrular ve token geçerliyse, talebi kullanıcının kimliği altında işleyerek isteği tamamlar.

JWT token, bir JSON nesnesi şeklinde kodlanmış bir dize olarak depolanır. Bu dize, kullanıcının kimliğinin ve erişim izinlerinin yanı sıra belirli bir süre geçerli olacağı tarih bilgisini de içerir. Middleware, token'ın geçerliliğini kontrol eder ve uygun şekilde doğruladıktan sonra talebi işleyerek ilgili kaynaklara erişim izni verir.

JWT authentication middleware kullanarak authentication yapmak için, önce kullanıcının kimliğini doğrulamak için bir token sağlaması gerekir. Kullanıcının kimliği doğrulandıktan sonra, token, istek başlığına eklenerek sunucuya gönderilebilir. Sunucu, middleware aracılığıyla token'ı doğrular ve token geçerliyse, kullanıcının kimliği altında talebi işler ve ilgili kaynaklara erişim izni verir.


Authorization Middleware Kullanımı

Authorization middleware, istekleri belirli bir işleme veya erişime izni olup olmadığına göre yönlendirir. Bu şekilde yetkisiz erişimler engellenir. Authorization middleware, uygulamanın gereksinimlerine göre kendine özgü bir yapıda kullanılır.

Authorization middleware'in kullanımı için, rol bazlı veya policy bazlı bir yaklaşım benimsenebilir. Rol bazlı yetkilendirme, kullanıcılara roller atanır ve her rol için farklı işlemlere veya erişimlere izin verilir. Policy bazlı yetkilendirme ise, kullanıcının verilen kriterlere uygun olup olmadığını kontrol eder.

Kullanıcının erişim izni bulunmayan bir işlemi gerçekleştirmesi durumunda, middleware kullanıcıyı otomatik olarak yönlendirir ve HTTP 401 (Yetkisiz Erişim) yanıtı döndürür. Böylece, uygulama güvenliği sağlanmış olur.

Bir uygulama, birden fazla yetkilendirme talebi için authorization middleware kullanabilir. Bu talepler, MiddlewareChain sınıfı ile yönetilir.

HTTP Status Kodu Açıklama
200 İşlem başarılı.
401 Kullanıcının yetkisi yok.
403 Kullanıcı yetkilendirildi, ancak kaynak erişime kapalı.
404 Kaynak bulunamadı.
500 Sunucu hatası.

Middleware Kullanarak Logging ve Exception Handling Nasıl Yapılır?

Micrisoft.AspNetCore.Diagnostics middleware'i kullanarak, anlık hata bilgileri ve istek tarihçeleri gibi bilgileri kaydedebilirsiniz. Bu middleware, uygulamalarınızda loglama, exception handling, telemetri verileri kaydetme ve hata ayıklama konularında size yardımcı olacaktır. Middleware kullanarak logging ve exception handling yapmak oldukça önemlidir, çünkü bu sayede uygulamanızda ortaya çıkan hataları kolayca tespit edebilir ve giderilebilirsiniz.

Logging middleware kullanarak, uygulamanızda oluşan hataları kaydedebilir ve hata mesajlarını inceleyebilirsiniz. Bu sayede, uygulama performansınızı ve işlevselliğinizi artırabilirsiniz. Middleware kullanarak loglama yapmak, uygulama güvenliğiniz açısından da önemlidir, çünkü bu sayede olası saldırıların takibi kolaylaşır ve uygulamanızın güvenliği artar.

Exception handling middleware kullanarak, uygulamanızda oluşan hataları yönetebilir ve karşılık gelen isteklere cevap verebilirsiniz. Bu middleware, uygulamanızda ortaya çıkan hataların yönetimini ve kontrolünü sağlar. Böylece, uygulamanızın kullanıcı deneyimi ve işlevselliğini artırabilirsiniz. Middleware kullanarak exception handling yapmak aynı zamanda uygulama güvenliğiniz açısından da önemlidir, çünkü bu sayede olası saldırılara karşı önlem alabilirsiniz.


Logging Middleware Kullanımı

Logging middleware, uygulamanızda oluşan hataları kaydetmenize ve bu hatalarla ilgili bilgi toplamanıza olanak tanır. Bu sayede hataların kaynağını belirleyebilir ve uygulamanızı daha stabil hale getirebilirsiniz.

Microsoft.Extensions.Logging paketi, ASP.NET Core uygulamanızda logging middleware kullanmanıza olanak tanır. Bu paketin kullanımı oldukça basittir. Uygulamanızda ILoggerFactory arayüzünü kullanarak ILogger nesnesi elde edebilirsiniz. Bu nesne aracılığıyla daha sonra farklı seviyelerde (debug, information, warning, error, critical) log mesajları oluşturabilirsiniz.

Basit bir örnek üzerinden anlatmak gerekirse;

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)    {        loggerFactory.AddConsole();        var logger = loggerFactory.CreateLogger("LoggingMiddleware");        app.Use(async (context, next) =>        {            logger.LogInformation("Request started.");            await next.Invoke();            logger.LogInformation("Request finished.");        });    }    

Bu örnekte, ILoggerFactory arayüzü kullanarak ILogger nesnesi elde edilir ve "LoggingMiddleware" adıyla bir logger oluşturulur. Daha sonra, Use metodu içerisinde yazılan middleware, context nesnesi üzerinden logger'a erişebilir ve log mesajları oluşturabilir.

ILogger nesnesinin farklı seviyelerde (debug, information, warning, error, critical) log mesajları oluşturma özelliği sayesinde, uygulamanızın herhangi bir yerinde oluşan hataları inceleyebilir ve çözümler üretebilirsiniz.


Üçüncü Parti Logging Framework Kullanan Middleware Kullanımı

=

Birçok middleware, uygulama loglarını tutmak için kendi logging mekanizmalarını kullanır. Ancak, bazı middleware'ler üçüncü parti logging framework'leri kullanarak loglama yaparlar.

Üçüncü parti logging framework'leri, Özelleştirilebilir ve karar verilebilir bir düzenlemeler yapısı sunarak daha kapsamlı bir loglama deneyimi sunar. Bununla birlikte, bu framework'lerin kullanımı middleware kurulumunu biraz daha karmaşık hale getirebilir.

Middleware'ler ile üçüncü parti logging framework'lerinin birleştirilmesi kurulumların karmaşık hale gelmesine neden olabilir. İlk olarak logging framework'ü yüklemelisiniz ve daha sonra middleware'leri yapılandırmalısınız.

Aşağıdaki tablo, birkaç yaygın üçüncü parti logging framework'lerinin adlarını ve kısa açıklamalarını içermektedir:

Framework Adı Açıklama
Serilog Birçok seçeneği bulunan basit bir loglama çözümüdür.
NLog Son derece yapılandırılabilir bir .NET loglama platformudur.
Log4net Apache Software Foundation tarafından desteklenen açık kaynaklı bir .NET loglama çözümüdür.

Bazı middleware'ler loglama konfigürasyonu için bir dizi yöntem sağlar. Bir yöntem, yöntemi çağıran middleware'lerin tümünde geçerli olacak bir ILoggerFactory'nin ayarlama işlemini gerçekleştirmek ve ardından ILoggerFactory aracılığıyla ILogger örneğini almaktır.

Aşağıdaki örnek, Serilog framework'ünün kullanımını göstermektedir:

public class Startup{    public void ConfigureServices(IServiceCollection services)    {        services.AddControllers();    }    public void Configure(IApplicationBuilder app)    {        // Serilog kullanarak logging        Log.Logger = new LoggerConfiguration()            .Enrich.FromLogContext()            .WriteTo.Console()            .CreateLogger();        app.UseSerilogRequestLogging(); // middleware        app.UseRouting();        app.UseEndpoints(endpoints =>        {            endpoints.MapControllers();        });    }}

Önce ILoggerFactory'yi yapılandırmak ve ardından ILoggerFactory.CreateLogger() methodu ile ILogger örneğini almamız gerekiyor. Daha sonra, ILogger örneğini kullanarak loglama yapabilirsiniz.


Exception Handling Middleware Kullanımı

Exception handling middleware, .NET Core web uygulamalarında oluşan hataları yönetmek için kullanılır. Bu middleware, uygulamanızın dış dünyaya hatalı bir cevap vermesini engelleyerek, kullanıcı dostu bir hata sayfası gösterir. Ayrıca, hata kaynaklarını inceleyerek gelecekte benzer hataların önüne geçmenizi sağlar.

Exception handling middleware kullanarak, uygulamanızdaki hatalar için özel işlemler yapabilirsiniz. Örneğin, hata mesajlarını loglara kaydedebilir, hatanın ekstra bilgilerini göstererek hatayı çözmeye çalışan kullanıcılara yardımcı olabilirsiniz. Hatanın neden kaynaklandığını anlamak için, hata sayfasında detaylı bir hata mesajı göstermek de oldukça faydalıdır.

Bir exception handling middleware oluşturmak için, UseExceptionHandler methodunu kullanmanız gerekmektedir. Örneğin;

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){    // ...    app.UseExceptionHandler(errorApp =>    {        errorApp.Run(async context =>        {            context.Response.StatusCode = StatusCodes.Status500InternalServerError;            context.Response.ContentType = "text/html";            var error = context.Features.Get();            if (error != null)            {                var errorMessage = $"An error occurred: {error.Error.Message}";                await context.Response.WriteAsync(errorMessage).ConfigureAwait(false);            }        });    });    app.UseRouting();    app.UseEndpoints(endpoints =>    {        endpoints.MapControllerRoute(            name: "default",            pattern: "{controller=Home}/{action=Index}/{id?}");    });}

Bu örnek kodda, UseExceptionHandler methodu kullanılarak bir exception handling middleware oluşturulmuştur. Middleware, oluşan hatanın detaylarını alır ve kullanıcılara özel bir hata sayfası gösterir.

Exception handling middleware kullanmak, uygulamanızın daha güvenli, kullanıcı dostu ve kolay bir şekilde yönetilmesini sağlar.