Ana içeriğe atla

Asp.Net MVC Framework - Güvenlik (Authorization)

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.

Yorumlar

bayramucuncu dedi ki…
GÜzel çalışma turhal eline sağlık

Bu blogdaki popüler yayınlar

Olasılıksız - Kitap Yorum

Olasılıksız hayatımda okuduğum en iyi kitaptı. Tek çırpıda hiç sıkılmadan, eğlenerek okudum bu kitabı, tavsiyem sizinde okumanız.Kitabın kapağı ve içeriği ile ilgili kısa bilgi aşağıdadır.Olasılık, tahmin, düşünceler, nöbetler, karışıklıklar, ileriyi görebilme zannı, dejavu ve tabii ki olasılıksız şeyler. Bu kelimelerle içli dışlı olabileceğiniz, bütün bu kelimelerin yaşamdaki yerini kavrayabileceğiniz müthiş bir uyarlama.Adam Fawer' ın ortaya çıkardığı bu uyarlama romanın müthiş bir çalışmanın ve araştırmanın sonucu ortaya çıktığının kitabın başından sonuna kadar farkındasınız. Bu uyarlamasını, derin araştırmalarıyla birleştirip romanı tekdüzelikten çıkarıp müthiş bir yere koyduğu için de Fawer' a müteşekkir oluveriyorsunuz. Sıkıcı diye nitelendirebileceğiniz teorik bilgileri bile bir çırpıda okuyuveriyorsunuz. Teorik bilgiler dahi olaylarla sonuna kadar bağlantılı aktarılmış. Tekdüzelikten çıkmış bir roman; olasılıksız. Her an olayın kurgusunun değişmesi olasılık dahilinde. …

.Net 3.5 SP1 – Full Install Packages (Tam Kurulum)

.Net Framework 3.5 SP1 ‘i bilgisayarınıza kurmak istediğinizde normal şartlar altında Microsoft ‘un sitesinde 2.7 mb ‘lik bir dosya indirir ve kurulum işlemlerinizi bu dosya üzerinden yaparsınız. Ancak bu indirmiş oluğunuz dosya yaklaşık 220 mb ‘lik veriyi internetten indirerek kurulum yapmaktadır. İnternet çıkışına izin verilmeyen kurumlar ve kuruluşlar için bu durum bir sıkıntı oluşturmaktadır. Bu sebepten ötürü aşağıdaki link yardımı ile tam yükleme paketini indirdikten sonra hiç internet ihtiyacınız olmadan .Net 3.5 SP1 ‘i kurabilmeniz mümkün olacaktır.Link

Çoklu Dil Desteği – Veri Tabanı Tasarım Örnekleri ile

Zaman içerisinde karşımıza çok farklı projeler gelebilmektedir. Ancak bu projeler içerisinde özellikle de global ölçekli ya da bu ölçekte uygulama geliştiren firmalarda bazı temel gereksinimler sürekli olarak karşımıza çıkabilmektedir. Bu gereksinimlerden biri ve belki de en önemlisi olan çoklu dil desteğinin veri tabanı (DB) katmanında nasıl yapıldığını kısa ve hızlıca inceliyor olacağız.Öncelikle çoklu dil desteği dediğimizde aklımıza gelen ilk çözüm yolu *.resx dosyalarını kullanmak gelmektedir. Ancak bu uzaktan yönetilen ya da anlık olarak metin değişikliği gereksinimi bulunan uygulamalarda bazı ufak problemler çıkartabilmektedir.Ne gibi problemler derseniz; iki grupta inceleyebiliriz. Web projeleri ve windows üzerinde çalışan projeler.Web projelerinde IIS üzerinde yer alan bir *.resx dosyasını değiştirdiğinizde son kullanıcı tarafında etkisi hemen görülmeyebilir. Cache mekanizmaları sebebiyle ortalama 15-30 dakika arasında bir görüntüleme süre farkı ile karşılaşabiliriz. Faha köt…