ASP.NET Core WebApi Uygulaması JWT ile Kimlik Doğrulama

Burak Coşkun
Bilişim Hareketi
Published in
3 min readAug 13, 2019

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ı

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.

UsersController.cs

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.

User.cs

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.

AppSettings.cs

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ı.

appsettings.Development.json

ASP.NET Core JWT App Settings

Path: /appsettings.json

Tüm ortamlar için uygulama ayarlarını içeren kök konfigürasyon dosyası.

AppSettings.cs

ASP.NET Core JWT Program

Path: /Program.cs

Program class’ı, uygulamayı başlatmak için sınıftır.

Program.cs

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.

Startup.cs

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.

jwtCoreDemo.csproj

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.

Postman uygulaması: Sunucudan dönen cevap

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

--

--