Makale Özeti

Bu yazımızda MVC Framework uygulamalarında güvenlik denilince ilk akla gelen Authorization konusunu incelemeye çalışıyoruz.

Makale

Asp.Net MVC Framework ile neler yapabileceğimizi incelemeye Authentication konusuna değinerek devam ediyoruz. Web sayfalarının güvenliği denildiğinde akla gelen ilk iki sözden biridir Authentication. Son kullanıcıya gösterilecek olan sayfaların kimler tarafından görüntülenebileceği hangi roller yardımı ile görüntülenebileceği konusunda yapılan güvenlik işlemlerine denmektedir. Tabii web uygulamalarında bu kadar sık kullanılan bu işlemin (hatta olmazsa olmazlarındandır) MVC Framework ile hazırlanan uygulamalarda olmaması beklenemezdi. Authentication edilmiş olan kullanıcıların sayfaları görüntülerden nasıl etkiler alabileceğini ve Controller katmanında bu kontrolleri temel anlamında nasıl yapabileceğimizi açıklayacak olduğumuz bu yazı ile güvenlik konusuna da giriş yapmış oluyoruz.

Web Site Administrator Tools Kullanımı

Güvenlik konulu yazımızı incelerken ilk olarak yapılması gereken web sayfasını görüntüleyebilecek yetki seviyelerine ilişkin kişileri ve rolleri oluşturmak olacaktır. Hepimiz alışık olduğu gibi Visual Studio ortamında geliştirilen web uygulamalarında Asp.Net Configuration seçeneği yer almaktadır. Bunun yardımı ile web uygulamaları ile ilgili temel işlemlerin yapılabilmesi mümkündür. Ayrıca bu ekranın içerisinde karşımıza çıkan ekrana en genel anlamda Web Site yönetim aracıda denilmektedir. bu ekranı açabilmek için projenin içerisinde yer alan web uygulamasına bir kez tıklama yapıldıktan sonra üst tarafta beliren asp.net configuration seçeneğine tıklıyoruz.



Açılan Web site yönetim aracından güvenlik sekmesine tıkladıktan sonra yeni kullanıcı oluştur linkine tıklayarak site içerisinde belirti bir role sahip olacak olan kullanıcı oluşturuyoruz.

Not: Sizlerin oluşturmuş olduğu web uygulamalarında eğer ki güvenlik sekmesine tıkladığınızda eğer ki veri kaynağını seçiniz şeklinde bir mesaj alıyorsanız bu web.config dosyanızın düzenlenmemiş olmasından olma ihtimali yüksektir. Bu durumda web site yönetim aracı sayfasını kapattıktan sonra MVC uygulamanızı bir kez çalıştırdıktan sonra tekrardan bu ekrana girerseniz sorunsuzca işlemleri yapabiliyor olabileceksiniz.



Kullanıcıyı sorunsuzca oluşturduktan sonra bu kullanıcıya bir rol atama işlemini yapalım.  Bunun için ilk olarak güvenlik sekmesi içerisinde yer alan rolleri aktifleştir (enabled roles) linkine tıkladıktan sonra yeni bir rol oluştur (Create or Manage roles) linkine tıklayarak yeni bir rol oluşturuyoruz.



Not: Eğer ki rol oluştururken Asp.Net SQL Role Provider içeren bir hata alırsanız Provider sekmesi içerisinde yer alan linklerden yararlanarak bu sorunu gerekli provider leri test ederek sorunu çözebilmeniz mümkündür.

Sorunsuzca rolü de oluşturduktan sonra bu rolü de kullanacak bir kullanıcı daha oluşturalım. Bunun için tekrardan yeni kullanıcı oluşturduğumuz ekrandan yararlanıyoruz. Yalnızca sağ tarafta yer alan roller bölümünden oluşturduğumuz rolü de seçtikten sonra kullanıcıyı oluştur butonuna tıklıyoruz.



Bu işlemde sorunsuz bir şekilde tamamlandı. Buraya kadar yaptıklarımıza kısaca özetlemek gerekirse, sertur ve turhal isimli iki kullanıcı oluşturduk. Ayrıca yonetici isimli bir tane de rol oluşturduk. Sonrasında turhal isimli kullanıcı yonetici rolüne atandı.

Authorization Gerekliliği

Site içerisinde kullanılan kimlik denetimlerine uyumlu kullanıcıları seçme işlemini Authorization ile gerçekliyoruz. Authorization işlemini kullanmak için Controller içerisinde yer alan action 'ların üst kısmına ekleyecek olduğumuz [Authorize] özniteliği yardımı ile sağlıyoruz.

Bu işlemi kısaca örneklemek gerekirse HomeController sınıfının içerisine SirketGuvenligi isimli yeni bir action ekliyerek buna [Authorize] özniteliğini ekleyerek kullanılabilmesine olanak tanıyoruz.

Controller\HomeControllers.cs
using System.Web.Mvc;

namespace Security1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        [Authorize]
        public ActionResult SirketGuvenligi()
        {
            return View();
        }
    }
}

Eğer ki web sayfasında kullanıcı girişi yapılmadan adres çubuğuna /Home/SirketGuvenligi adresine giriş yapılmak istenirse, buna izin vermeyecek ve kullanıcı giriş ekranına yönlendirecektir. Bu ekran üzerinde de yeni bir kullanıcı oluşturulabilmesi imkanı vardır.



Ekran görüntüsünde de görüldüğü gibi girişe izin verilmemektedir. Eğer o kişinin kullanıcı adı ve şifresi varsa giriş yapabilecektir. Aksi durumda ise yeni bir kullanıcı oluşturarak yine bu sayfaya girebilmesi mümkün olacaktır. Şimdi herhangi bir kullanıcı ile web uygulamasına giriş yapıyor ve /Home/SirketGuvenligi isimli sayfaya giriş yapmayı deniyoruz. Bu durumda karşımıza aşağıdaki gibi bir sonuç çıkacaktır.



Sonuç istediğimiz gibi artık web sayfasına üye olmayan kullanıcılar bizim yetki ile girilen sayfalara girmesini engellemiş bulunuyoruz.

Kullanıcı ve Rol Authorizing

Controller içerisinde yer alan actionların üst kısmına [Authorize] özniteliğinden yararlanarak belirtmiş olduğumuz sayfalara kullanıcı girişi olmadan girilmesine engelleyebiliyoruz. Ayrıca bu özniteliğin özelliklerinden yararlanarak kullanıcı ve rol bazlı olarak giriş yapılabilmesine olanak tanıyabiliriz. Bu işlem için SerturGuvenlik() ve YoneticiGuvenlik() isimli actionları Controller sınıfına ekliyoruz


Controller\HomeControllers.cs
using System.Web.Mvc;

namespace Security1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        [Authorize]
        public ActionResult SirketGuvenligi()
        {
            return View();
        }

        [Authorize(Users = "Sertur")]
        public ActionResult SerturGuvenlik()
        {
            return View();
        }

        [Authorize(Roles = "Yonetici")]
        public ActionResult YoneticiGuvenlik()
        {
            return View();
        }
    }
}

Bu işlemlerden sonra gerekli viewları oluşturduktan sonra her ikisi içinde kullanıcı girişi yaparak sayfaları denediğimizde yetkilendirmenin başarılı bir şekilde gerçekleştiğini gözlemleyebiliriz.

Örnek olarak Sertur kullanıcı ile sisteme giriş yapıldığında Home/YoneticiGuvenlik adresine giriş yapıldığında yetkiden ötürü girilemediği görülmektedir. Bir diğer örnek olarak ise, başka bir kullanıcı ile sisteme giriş yapıldıktan sonra SerturGuvenlik adresine giriş yapıldığında yine giriş yapılamadığı gözlemlenecektir.

Authentication Ayarlamak

MVC uygulamalarında var sayılan olarak kullanılan veri tabanını düzenleyebilme olanağımızda yer almaktadır. Geliştirilen uygulamaları incelediğimizde Login kontrollerinden alışık olduğumuz aspnetdb.mdf dosyasından yararlanıldığı gözlemlenebilecektir. Hazırlanmış olan projenin bütün dosyalarını görüntüle dediğimizde de veri tabanı dosyasının App_Data klasörünün içerisinde yer aldığı görebiliriz.



Eğer ki bizler yeni bir veri tabanı eklemek istersek C:\Windows\Microsoft.NET\Framework\v2.0.50727 yolunda yer alan aspnet_resql uygulamasını çalıştırarak yeni bir ver tabanı oluşturabilinmesi mümkündür.



Bu işlem sonrasında SQL Server Management Studio yardımı ile aspnetdb veritabanını görüntüleyebilmemiz mümkündür. Sonrasında web.config dosyası içerisinde kendi SQL serverımızın çalıştığı sunucu adını, kullanıcı adını ve şifresini de vererek düzenleme yapabilir, kendi veri tabanımız ile çalışabilinmesi mümkündür.

Eğer ki bu veri tabanının çalışmasına özgü bir SQL kullanıcı oluşturulmak istenirse SQL Server Management Studio yardımı ile oluşturulabilinmesi mümkündür. Bunun için Security tabı içerisinde yer alan Logins klasörünün üzerine sağ tıklama yaptıktan sonra New login... seçeneğine tıklanması ile bu işlem başlanmış olunacaktır.


Bu seçeneğe tıkladıktan sonra karşımıza çıkan ekrandan aspnet_roles ve aspnet_membership şemalarını oluşturmuş olduğumuz ya da var olan bir kullanıcıya atayarak kullanılabilmesine olanak tanıyoruz.



Bu işlem sonrasında kendi kullanıcımıza da gerekli rol ve kullanıcı oluşturma,değiştirme ve silme yetkisi tanımlamış oluyoruz.

Bu yazımızda ASP.NET MVC uygulamalarında güvenlik amacı ile sayfalar arası kimlik denetimi sağlanabilmesi için kullanıcı ve rol oluşturduktan sonra bu bilgileri [Authorize] özniteliği yardımı ile nasıl kullanabileceğimizi incelemeye çalıştık.

Umarım yararlı olabilmiştir.

Turhal Temizer
http://turhal.blogspot.com