Asp.Net Web API — Token Based Authentication Kullanımı

Murat Süzen

Merhabalar, bu makalede Asp.Net Web API ile RESTful servis geliştirirken Token Based bir Authentication işleminin nasıl yapıldığını ele alacağız.

Öncesinde ORM aracı olan Entityframework’ü, en çok kullanılan yöntemlerden biri olan Code First yöntemi ile bir tablo oluşturma işlemini yapacağız. Öncelikle yeni bir boş Web API projesi oluşturuyoruz.

Daha sonra “Install-Package Entityframework” yardımıyla Entityframework’ ü projemize yüklüyoruz. Projemize sorunsuz yükleme sonrasında Model klasorümüze yeni bir sınıf ekleyebiliriz.

Book isimli sınıfımıza baktığımızda “[Required]” attributelerin olduğunu görmekteyiz. Bu attributeler ilgili alanların boş geçilemeyeceğini kontrol etmektedir ve “System.ComponentModel.DataAnnotations” altında bulunur. Daha sonrasında DbContext implementasyonunu alabileceğimiz bir Context sınıfı oluşturmalı ve ilgili model sınıflarımızı DbSet<> şeklinde belirtmeliyiz.

LibraryService sınıfımızın construction metodumuza “MyLibraryEnitity” isimli conntectionstring isimini set ediyoruz. Bu şekilde config dosyamızdaki connectionstring elemanını tanımlamış olacağız.

Daha sonrasında migrations ayarlarını yapmamız gerekmektedir. Package Manager Console yardımıyla “Enable-Migrations –EnableAutomaticMigrations” komutu ile Migrations isimli klasör oluşacaktır.

Bu işlemden sonra oluşan configuration classına yukarıdaki satırları eklemeniz gerekiyor. Eğer eklemezseniz veri tipi dönüşümlerinde ve kolon kaldırma işlemlerinde veri kaybı olacağından dolayı model hata verip güncellenme yapmayabilir.Daha sonra “add-migration CreateDb” komutu yardımıyla otomatik oluşturulan migrations sınıflarını inceleyebiliriz.

Bu işlemlerden sonra “Update-Database” komutu ile bağlantı ayarlarımız da sıkıntı yok ise veritabanımız ve tablomuz otomatik olarak oluşturulacaktır.

Veritabanı işlemlerimizi tamamladığımıza göre artık servis işlemleri için gerekli aşamalara geçebiliriz. NuGet Package Manager içerisinden Microsoft.AspNet.WebApi.Owin, Microsoft.Owin.Host.SystemWeb ve Microsoft.Owin.Security.OAuth‘u paketlerini projemize kuruyoruz. Owin pipeline’ını çalıştırabilmek için “Startup” sınıfını hazırlamalıyız. Bunun için App_Start klasörü üzerinde sağ tıklayıp Add New Item seçeneği ile açılan ekranda OWIN Startup class ı seçiyoruz ve projemize ekliyoruz.

Owin startup sınıfını belirlemek için assembly atamasını yapıyoruz ve Startup sınıfımız yazmaya başlıyoruz.

“OAuthAuthorizationServerOptions” ayarlarında token alacağımız url path’i belirliyoruz. AppBuilder’a token üretimini sağlaması için OAuthServerOptions ayarlarımı iletiyoruz.UseOAuthBearerAuthentication ile Authentication olarak ise Bearer yapısını kullanacağımızı tanımlıyoruz. OAuthAuthorizationServerOptions ayarlarını tanımlarken Provider olarak tanımladığımız SimpleAuthorizationServerProvider isimli sınıfımızı OAuthAuthorizationServerProvider sınıfından miras alarak oluşturuyoruz. Bu sınıfta 2 metodu ezdiğimizi görmekteyiz. Bu metotlardan “ValidateClientAuthentication” isimli metodumuz client’i doğrulamak için kullanılan kısımdır ki biz direkt doğrulama işlemini yapıyoruz. İkinci metodu ise asıl kaynak doğrulamasının yapıldığı bölümdür. Bu bölümde kullanıcı adı ve şifre ile direkt doğrulama işlemi yaptıktan sonra CORS ayarlarını tamamlıyoruz.

Bu işlemleri tamamladığımızda yeni bir controller ekleyip CRUD metodlarımızı yazabiliriz. Burada dikkat etmemiz gereken yerlerden biri “[Authorize]” özelliği ile sınıfa yada metoda erişim kısıtlaması verilebilmektedir.

Ben controller içerisindeki CRUD metodlarımı yazdıktan sonra “WebAPIConfig” içerisinde route ayarlarında {action} bilgisinin de kullanılmasını ayarlıyorum.

Projemizi çalıştırdığımızda herhangi bir rest client toolunu kullanıp testlerimizi yapabiliriz. Ben Google’ın geliştirdiği ve Chrome extensionu olarak kullanılan Postman toolunu kullanacağım.

Direk servisimiz ayağa kalktığında “getbooks” metodumuzu çağırdığımızda sınıf üzerinde “[Authorize]” özelliği eklediğimiz için erişim hatası almış olacağız. Önce token path’ine ilgili header bilgileri ile post işlemi yaptığımızda aşağıdaki gibi token bilgisini almış olacağız.

Daha sonra ilgili headers alanlarına token bilgilerini aşağıdaki gibi girip servisimizden bilgilerimizi alabiliriz.

Bir sonraki makalede görüşmek üzere…

Murat Süzen

Written by

Main blog is muratsuzen.com

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade