ASP.NET Core 3.1 Web API – JWT Authentication Kullanımı

Merhabalar bu makalede .Net Core 3.1 versiyonu ile bir Web API örnek projede JWT (JSON Web Token) kimlik doğrulama yapısını inceleyeceğim. Daha önceki Web API makalelerine buradan ulaşabilirsiniz.

Örnek olarak yapacağım API projesinin içeriğini şu şekilde oluşturacağım:

/users/authenticate – [AllowAnonymous] olarak tüm gelen kullanıcı tiplerindeki istekte username ve password bilgilerini isteyecek, kullanıcı doğrulaması sonrasında istemciye bir JWT token bilgisi döndürecektir.

/users – Authorization tipinde Bearer Token bilgisini göndererek yaptığımız istek sonrasında kullanıcılar listesini istemciye döndürecektir. Token bilgisi yoksa yada geçersizse, sunucudan istemciye 401 Unauthorized yanıtı dönecektir.

Uygulama dosyalarını aspnetcore-3-1-web-api-jwt Github adresinde bulabilirsiniz.

ASP.NET Core 3.1 Web API JWT Örnek Projeyi Çalıştırmak İçin Gereksinimler

ASP.NET Core uygulamalarını yerel olarak geliştirmek ve çalıştırmak için aşağıdakileri indirip yükleyin:

  • Visual Studio Code – adresinden Windows, Mac ve Linux işletim sistemlerinde çalışabilen Microsoft tarafından geliştirilip açık kaynak olarak sunulan kod editörünü indiriniz.
  • C# extension adresinden yada VS Code içersinideki eklentiler bölümünden .NET Core uygulamaları geliştirirken kolaylıklar getiren eklentiyi indiriniz.
  • .NET Core SDK – adresinden .NET Core 3.1 runtime SDK dosyasını indirip kurmalısınız.

ASP.NET Core 3.1 Web API JWT Örnek Projesi Nasıl Çalıştırılır?

  • Proje dosyalarını aspnetcore-3-1-web-api-jwt Github adresinden indirebilir yada klonlayabilirsiniz.
  • WebApi.csproj proje dosyasının bulunduğu klasörde bir terminal ile yada VS Code terminalinde dotnet run komutunu çalıştırın.
  • Uygulama çalıştığında http://localhost:4000 adresinden istek gönderebilirsiniz.

Postman ile ASP.NET Core 3.1 Web API JWT Projesini Test Etmek

  • Öncelikle https://www.getpostman.com/ adresinden güncel Postman uygulamasını indirip kurunuz.
  • Daha sonra yeni bir sekme açarak istek gönderim tipini POST olarak değiştirip http://localhost:4000/users/authenticate adresi için POST isteği hazırlayalım.
  • Body bölümünde raw seçeneğini ve JSON formatını seçiyorum.
  • Body içeriğine yukarıdaki şekilde username ve password bilgilerini JSON formatında giriyorum. POST isteğini gönderdiğimde aşağıdaki gibi kullanıcı ve token bilgisi dönüyor.
Postman users/authenticate POST
  • Aldığımız token bilgisi ile http://localhost:4000/users adresine istek gönderdiğimizde aşağıdaki gibi bir sonuç alacağız.
Postman users/ GET

ASP.NET Core Web API – User Entity

Path: /Entities/User.cs

Kullanıcı bilgilerini taşıdığımız user sınıfını oluşturuyorum. Entity yapıları uygulamanın farklı bölümlerinde veri iletimi için kullanılır. Ayrıca controller yardımıyla http yanıtlarını döndürmek içinde kullanılabilmektedir. Bu sınıfı veritabanındaki User tablosu olarak düşünebilirsiniz. Entities sınfıları Entityframework ile Code First yaklaşımında veritabanı tablolarını oluşturmak için kullandığımız sınıflarıdır. Not: Entities yapılarında kısıtlı veri döndürmek istendiğinde Models klasöründe ihtiyaca yönelik sınıflar kullanılmalıdır.

ASP.NET Core Web API – App Settings

Path: /Helpers/AppSettings.cs

.Net Core uygulamalarında appsetting.json dosyası, uygulama içerisinden erişilebilecek ayarların/verilerin tanımlandığı ayar dosyasıdır. ASP.NET Core uygulamalarında Startup.cs dosyasında bulunan ConfigureServices yapısı yardımıyla appsettings.json içerisine eklediğimiz verileri sınıflara enjekte ederek uygulama içerisinde taşıma ve kullanma imkanına sahip olmaktayız.

ASP.NET Core Web API App Settings (Development)

Path: /appsettings.Development.json

Geliştirme ortamına özgü uygulama ayarlarını içeren yapılandırma dosyası.

ASP.NET Core Web API App Settings

Path:/appsettings.json

Tüm ortamlar için yapılandırma ayarlarını içeren kök yapılandırma dosyası.

Secret özelliği ile JWT token oluşturmak için kullanacağınız benzersiz bir anahtar atayacağım.

ASP.NET Core Web API AuthenticateModel

Path:/Models/AuthenticateModel.cs

AuthenticateModel token bilgisi almak için istemcinin göndermiş olduğu istekte User sınıfının sadece username ve password bilgisini parametre olarak göndermesi için kısıtlı bir sınıftır. [Required]  attribute kullanımında UserName ve Password özelliklerinin zorunlu doldurulması gerekmektedir.

ASP.NET Core Web API Program

Path:/Program.cs

Program sınıfı, uygulamayı başlatmak için kullanılan bir console uygulama dosyasıdır. IHostBuilder ile Web API uygulamasının çalışmasına ihtiyacı olan web sunucusunu yapılandırır ve başlatır. ASP.NET Core uygulamasını şablondan oluşturduğumuzda varsayılan olarak gelmektedir. Builder alt özelliğinde Web API uygulamasının hangi adres ve portta başlatılacağını UseUrls ile değiştiriyorum.

ASP.NET Core Web API Startup

Path:/Startup.cs

Startup ​​sınıfı, uygulamanın tüm isteklerin nasıl işleneceğini yapılandırdığımız sınıftır.

ASP.NET Core Web API – IUserService

Path:/Services/Abstract/IUserService.cs

UserService service sınıfının nasıl bir yapıda oluşacağını belirlediğimiz UserService sınıfının interface dosyasıdır.

ASP.NET Core Web API – UserService

Path:/Services/Concrete/UserService.cs

UserService sınıfında IUserService interface dosyasından implement ettikten sonra ilk olarak constructor oluşturarak IOptions ile appsetting değerlerini global bir değişkene atıyorum. Bu şekilde Secret bilgisine service sınıfından erişebileceğim. Daha sonra statik olarak bir User listesi dolduruyorum. Bu User verisi ile Authenticate metodunda UserName ve Password kontrolü ile userId içeren bir Claim oluşturup Hmac256 yapısında token yaratıp user sınıfındaki Token alanına atıyorum. Ayrıca veriyi istemciye geri döndürmeden önce kullanıcının şifresini temizliyorum. Aynı şekilde tüm kullanıcıları döndürebilen GetAll metoduna şifreleri temizliyorum.

ASP.NET Core Web API – UsersController

Path:/Controllers/UsersController.cs

Not: Tüm controller sınıfının [Authorize] attribute ile yetkilendirilmesi yanlızca [AllowAnonymous] attribute içeren metotları kapsamamaktadır. Çünkü [AllowAnonymous] attribute içeren metotlar [Authorize] attribute yapısını ezmektedir.

ASP.NET Core Web API – WebApi.csproj

Path:/WebApi.csproj

Kaynakça :

Sosyal medyada paylaşabilirsiniz..

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir