ASP.NET Core WebApi Uygulaması JWT ile Kimlik Doğrulama
Bu makalede, JWT (JSON Web Token) kimlik doğrulamasının C# programlama dili ile ASP.NET Core 2.1 WebApi uygulamasında nasıl gerçekleştirilebildiğine dair bir çalışma yapacağız.
Öncelikle JSON Web Token(JWT) ile ilgili yazıma göz atabilirsiniz..
/user/authenticate — body kısmında kullanıcı adı ve şifreyi içeren HTTP POST isteklerini kabul eden adrestir. Kullanıcı adı ve şifre doğruysa, bir JWT kimlik doğrulama token ve kullanıcı bilgileri sunucudan istemci tarafına döndürülür.
/users — HTTP Authorization Header(Başlık kısmı) eğer geçerli bir JWT token’ı içeriyorsa, HTTP GET isteklerini kabul eden ve uygulamadaki tüm kullanıcıların listesini döndürmeye yarayan adrestir. JWT token’ı yoksa veya token geçersizse, sunucudan istemciye 401 Unauthorized yanıtı döner.
ASP.NET Core JWT Authentication API’ sini projesini localde Çalıştırmak için;
Şu anki proje kodunu https://github.com/burakc34/aspnet-core-jwt-authentication-api/ adresinden indirip veya klonlayabilirsiniz.
Proje ana dizininde (WebApi.csproj dosyasının bulunduğu yerde) komut satırından dotnet run komutunu çalıştırarak api’yi başlatın.
Now listening:http://localhost:4004 mesajını gördükten sonra Api’yi Postman gibi bir uygulamayı kullanarak test edebiliriniz.
NOT: Uygulamayı VS Code’da debug modunda VS Code’da proje ana dizinini açarak ve F5'e basarak veya üst menüden Debug -> Debugging Başlat’ı seçerek de başlatabilirsiniz.
ASP.NET Core JWT Kimlik Doğrulama Proje Yapısı
ASP.NET Core JWT Users Controller
Path: /Controllers/UsersController.cs
UsersController.cs ile kullanıcılar ile ilgili api için tüm route’ları/endpoint’leri yönetir, buna kimlik doğrulama ve standart CRUD işlemleri de dahildir.
Controllerdaki Action metodları [Authorize] attribute’ü kullanılarak JWT ile korunmaktadır. [AllowAnonymous] attribute’ü kullanarak ise public erişim’e izin vermiş oluruz. Bu güvenlikli olan yaklaşımı seçtim, böylece controller’a eklenen yeni action metodlarına sadece güvenli bir biçimde erişim sağlanabilecektir.
ASP.NET Core JWT User Entity
Path: /Entities/User.cs
User class’ı, uygulamadaki bir kullanıcının özelliklerini barındırır. Entity sınıfları, uygulamanın farklı bölümleri arasında (örneğin, servisler ve metodlar arasında) veri iletiminde kullanılır.
ASP.NET Core JWT App Settings
Path: /Helpers/AppSettings.cs
App settings class’ı appsettings.json dosyasında tanımlanan özellikleri içerir ve dependency injection ile yerleşik olarak ASP.NET Core projelerinde kullanılarak sınıflara enjekte edilen nesneler üzerinden uygulama ayarlarına erişmek için kullanılır. Örneğin, UserService hizmeti ile, uygulama ayarlarına yapıcıya enjekte edilen bir IOptions <AppSettings> appSettings nesnesi aracılığıyla erişilir.
ASP.NET Core JWT User Service
Path: /Services/UserService.cs
UserService class’ı, kullanıcı kimlik bilgilerinin doğrulanması sonucu JWT token’ı döndürmek ve uygulamadaki tüm kullanıcıları elde etmek için kullanılan metodu içerir.
Başarılı kimlik doğrulaması olduğunda Authenticate metodu, appsettings.json içinde depolanan gizli bir anahtarı kullanılarak dijital olarak imzalanmış bir token oluşturan JwtSecurityTokenHandler sınıfını kullanarak bir JWT (JSON Web Token) oluşturur. Daha sonra kimlik doğrulama için web api isteklerinin HTTP Authorization Header’a dahil edilecek olan JWT token kullanıcının uygulamasına gönderilir.
ASP.NET Core JWT App Settings (Development)
Path: /appsettings.Development.json
Development ortamına özgü uygulama ayarlarının bulunduğu konfigürasyon dosyası.
ASP.NET Core JWT App Settings
Path: /appsettings.json
Tüm ortamlar için uygulama ayarlarını içeren kök konfigürasyon dosyası.
ASP.NET Core JWT Program
Path: /Program.cs
Program class’ı, uygulamayı başlatmak için sınıftır.
ASP.NET Core JWT Startup
Path: /Startup.cs
Startup class’ı, uygulamanın pipeline’ını ve tüm isteklerin ne şekilde işleyeceğinin yapılandırıldığı class’tır.
Örnekte kullanılan, Kestrel web sunucusudur, bu sunucu ASP.NET Core yeni proje şablonlarına varsayılan olarak dahil edilen web sunucusudur. Ancak uygulamanız veya web siteniz halka açık ise internetten HTTP request’lerinin alınacağı ve iletileceği (IIS, Apache, Nginx vb) üzerinde yer alması gerekmektedir.
ASP.NET Core JWT Web Api csproj
Path: /WebApi.csproj
Csproj (C # project) dosyası, uygulama için target framework ve NuGet paket bağımlılık bilgilerini içeren dosyadır.
Projemizi çalıştırdığımızda Postman uygulaması üzerinden body kısmında KullaniciAdi:burakc34, Sifre:1234 gönderdiğimizde eğer kullanıcı yetkilendirme işleminden başarılı bir şekilde geçtiyse sunucu tarafından aşağıdaki gibi Status:OK mesajı ve sonraki işlemlerinde kullanılmak üzere bir token gönderilir.
Makalemi beğendiyseniz alkışlamanız beni mutlu edecek.. :)
Yeni yazılarımdan haberdar olmak için beni twitter, linkedin veya medium hesaplarımdan takip edebilirsiniz.
Makalede aklınıza takılan, net olmayan veya belirtmek istediğin bir şey varsa aşağıdaki yorum kısmına yazabilirsiniz. Faydası olması dileğiyle..
Referans:
https://jasonwatmore.com/post/2018/08/14/aspnet-core-21-jwt-authentication-tutorial-with-example-api