.Net Core(Web Api) Middleware ile Authentication Kontrolü
Merhabalar,
.Net core ile hayatımıza giren middleware kavramı ile alakalı bir örnek yapacağız.Öncelikle middleware nedir onu bir açıklayalım.
Middleware, isminden de anlaşılacağı üzere bir ara katmandır.Ara katmandan kasıt, web te bir request’in response’a dönüşene kadar arada geçen süreci handle etmemizi sağlayan yapıdır diyebiliriz.Yani request ile response arasına müdahale etmemizi sağlayan ara katman görevi görür.
Middleware nesneleri projemizdeki “Startup.cs” dosyası içerisindeki “Configure” metodu içerisinde tanımlanır.
Bunu nasıl yaparız bir örnek ile inceleyelim.Net Core ile bende henüz bir proje yapmış değilim.Fakat öğrenmek amacıyla yaptığım örnek projeyi paylaşacağım.
Senaryomuz şöyle ki, bir web api uygulaması geliştiriyoruz.İstek(request) geldiğinde, gelen request’in header kısmında “Authorization” isminde bir data olacak.Bu data, isteği yapan kişinin servisi kullanmaya yetkisi olup olmadığına dair kontrol yapmamızı sağlayacak bilgileri içermektedir.Datayı alıp, datanın içindeki kullanıcı adı ve şifrenin doğruluğunu kontrol edip ona göre response’a devam edeceğiz veya hata döneceğiz.
Öncelikle middleware class ımızı oluşturuyoruz.RequestDelegate nesnesini parametre olarak alan bir constructor oluşturuyoruz.Bu nesne gelen request i handle etmemizi sağlayacak, gerekli işlemler yapıldıktan sonra httpcontext nesnesini alarak isteğe devam edecektir.
Yine middleware class ımızın içerisinde HttpContext nesnesini parametre olarak alan “Invoke” metodunu oluşturuyoruz.Request oluştuğunda ilgili middleware’ın içerisindeki “Invoke“ metoduna düşer.HttpContext nesnesi sayesinde bildiğiniz gibi request response gibi bilgilere ulaşabiliriz.Bu örneğimizde de, gelen request’in header kısmındaki “Authorization” datasını alıyoruz.
Bu data içerisindeki formatlanmış şekilde bulunan kullanıcı adı ve şifre bilgisini alıp kontrol ediyor, eğer doğruysa context’in user bilgisini set ediyor isteği devam ettiriyoruz.Bilgiler doğru değil ise 401(Unauthorized) durum kodunu dönüyor, hata alınırsa 400(Bad Request), request’in içerisinde header bilgisi bulunmaz ise 403(Forbidden) status code’unu HttpContext’e set ediyor ve request’i sonuçlandırıyoruz.
_nextMiddleWare(context) metodu ile request’e devam edilmesini sağlıyoruz.Web api’ye yapılan her istekte bu middleware çalışacak ve isteği yapan kullanıcının izni olup olmadığını doğrulayacaktır.
Oluşturmuş olduğumuz bu middleware class ını projemize tanımlama kısmına geldik şimdi.
.Net Core projemizde middleware lar Startup.cs dosyası içerisindeki “Configure” metodu içerisinde tanımlanır.Tanımlamak için birden fazla yöntem vardır.Biz aşağıda gördüğünüz şekilde UseMiddleware nesnesine, oluşturmuş olduğumuz “AuthenticationMid” class ını göndererek tanımlıyoruz.
Bu metot içerisindeki UseStaticFiles ve UseMvc extension metotları default olarak tanımlı gelir.
UseStaticFiles; statik kullandığınız dosyaları(resim,css dosyaları vb.) ana dizinden(wwwroot) tan alacak şekilde ayarlar.Örnek olarak;aşağıdaki img nesnesi aslında “wwwroot/images/banner1.svg” şeklindedir.
<img src=”~/images/banner1.svg” alt=”ASP.NET” class=”img-responsive” />
UseMvc metodu da yine MVC pattern’in kullanılacağını bildirir.İçerisinde de ayar olarak default route tanımlanmıştır.
Tabii bu middleware kullanımı için ufak bir örnek sadece.Middleware kavramı sayesinde request ile response arasına farklı farklı görevler(kontrol,loglama) yapacak nesneler ekleyebilir , bu aradaki süreci istediğimiz gibi handle edebilir, yazmış olduğumuz middleware nesnelerini pipeline’a dahil edebiliriz.
En basit haliyle middleware kullanımını görmüş olduk.Umarım faydalı bir yazı olmuştur.
Mutlu kodlamalar..