Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Serkan Üstündağ
Serkan Üstündağ
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
3 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  ASP.NET Serkan Üstündağ
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ASP.NET
Yayınlanma Tarihi : 13.2.2004
Okunma Sayısı : 34621
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 16.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 16.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 16.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 16.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET'te Rol Tabanlı(Rol-Based) Güvenlik
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Rol tabanlı güvenliğin ASPNET'te nasıl uygulandığına geçmeden önce rolün ne olduğu ve uygulamalar içerisinde nasıl bir önem taşıdığı incelenmelidir. Bu tür bir inceleme için bir forum sitesi iyi bir örnek olarak verilebilir. Bir forum sitesini kullanan kullanıcıların aşağıdaki gibi rolleri olabilmektedir.

1)  Sistem Yöneticisi, ekleme, silme güncelleme gibi işlemlerin hepsini yapabilen en yetkili kullanıcıdır.

2)  “Moderator”, sadece gelen mesajları onaylayabilir

3)  “Abone”, yeni mesaj yaratabilir, mesajları okuyabilir, yönetici özelliklerini barındırmaz.

4)   Diğer (genel Internet kullanıcıları), sadece mesajları okuyabilirler.

ASP ile geliştirilen uygulamalarda genel yaklaşım kullanıcıyı diğerlerinden ayırt eden kimlik bilgisinin (“userid”) “Session” nesnesinde saklanması ve ilgili kullanıcının yetki bilgisinin veritabanından sorgu ile alınmasıdır.  


int currentUserID = Session("UserID")

string userType = myDatabaseLookupFunction( currentUserID )

//Sadece System Administrator'ları ve Moderatörlerine izin var.

switch(userType)
{
   case "1":
   case "2" :
       // Geçerli kullanıcı
   case Else :
       // Yetkisiz Kullancı
}



Bu tarz kod parçaları yetki kontrolünün yapılmasını gerektiren her sayfada yer almakta ve her defasında veritabanına bir sorgu gönderip sonuç almaya sebep olmaktadır.

ASP.NET teknolojisi ile bu yaklaşım değişmektedir.

Temeller (“Principals”), Roller ve Kimlikler

“Windows” işletim sistemlerinde kullanıcılar ve kullanıcıların bağlı bulunduğu grup tanımlamaları bulunmaktadır. Örneğin, güvenli bir ağa erişmek isteyen istemci, bir kullanıcı adı ile bu kullanıcı adının bağlı bulunduğu bir yada daha fazla grup bilgisine ihtiyaç duymaktadır. .NET terminolojisinde, kullanıcı adı ve grup kavramları kimlik ve rol olarak isimlendirilmektedir. Kodsal açıdan bakılırsa, kimlik ve rol bilgileri “Principal” isimli nesne içerisinde saklanmaktadır. Rol tabanlı güvenliğin nasıl sağlandığının daha iyi anlaşılabilmesi için, öncelikle bu üç kavramın birbirleri ile olan ilişkileri incelenmelidir. Kodlama örnekleri ilerleyen başlıklar altında verilecektir.

Kimlikler 

Kimlikler kullanıcıları temsil etmektedirler. “System.Security.Principal” isim alanı altında bulunan, kullanıcı özelliklerinin tanımlanmasını sağlayan “WindowsIdentity” ve “GenericIdentity” sınıflarının yardımı ile gerekli kodlamalar yapılabilmektedir.  

Roller

Kodlamada en basit şekilde metin dizini olarak yaratılıp “Principal” nesnesine eklenirler.

string[] roleString = {"manager", "cleaner"}

“Principals”

Bir “Principal” nesnesi anlık kullanıcının kimlik ve rol bilgilerini taşımaktadır. Bu nesne “System.Security.Principal” “namespace” i altında yer alan “WindowsPrincipal” ve “GenericPrincipal” sınıfları kullanılarak yaratılmaktadır.

.NET ortamında çalışma zamanında, yetki kontrolünün gerektiği durumlarda, kullanıcı kimlik ve rol bilgilerini taşıyan “Principal” nesnesine ihtiyaç duyulmaktadır. Bu sebepten dolayı “authentication” işlemi sırasında gerçekliği doğrulanmış olan kullanıcı ve onun rol bilgileri “Principal” nesnesine atanmalıdır.

Kod Örneği

Aşağıdaki kod global.asax dosyası içerisine yazılmalıdır;


public void Application_AuthenticateRequest(object sender, EventArgs e)
{


    System.Web.Security.FormsIdentity id;

    id = HttpContext.Current.User.Identity;

    string[] MyRoles = new string[2];

    MyRoles[0] = "Manager";

    MyRoles[1] = "Admin";

    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,MyRoles)
}

Yukarıdaki kod parçasında, önceden belirlenmiş rol tanımları ve kimlik bilgileri “authentication” işlemini gerçekleştiren kullanıcı için “Principal” nesnesine atanmaktadır.

“FormsAuthentication” nesnesinin çalışma mantığı hatırlanırsa, bir kullanıcının gerçekliği kanıtlanmakta (“authentication”) ve bir cookie yaratılmaktadır. “Application_AuthenticateRequest” metoduda bu sırada sistem tarafından çağırılmaktadır. Bu yüzden, kullanıcıya dinamik olarak rol ataması için bu metot uygun bir yerdir.

Özet



1)  Kullanıcı adı ve şifresi kontrol edilir,

2)  Kullanıcı için tanımlı olan roller çekilir,(VB.NET Kodu)

        Dim strRoles() As String         Dim arrRoles As New ArrayList()         ' do some database call that returns a reader         While reader.Read()                 arrRoles.Add(reader("role"))         End While         strRoles = arrRoles.ToArray(GetType(String), String())  3)  Kimlik ve rol bilgileri “Principal” nesnesine atanır, 

Dim objPrincipal As GenericPrincipal = New GenericPrincipal(objIdentity, strRoles)

4)  HttpContext.Current.User= objPrincipal



Kullanıcı Rolü Kontrolleri

Uygulama içerisinde “Principal” nesnesinin içeriğine erişmek için dört ayrı yöntem bulunmaktadır. Bu yöntemler “Configuratively”, “Programmatically”, “Imperatively” ve “Declaratively” olarak isimlendirilmektedir. Burada ilk iki yöntem anlatılmaktadır.

Konfigürasyon Yöntemi(Configuratively)

Gerekli yetki kontrolü web.config dosyasında tanımlanmaktadır. Örneğin geliştirilen bir uygulamada, yönetim ile ilgili sayfalara sadece yönetici ve “moderator” tanımlı kullanıcıların erişmesi gerekmektedir. Bu durumu geçerli kılmak için aşağıda gösterildiği gibi bir kodlama yapılabilmektedir. 

      Bu yöntemin klasik ASP güvenlik yaklaşımı ile kıyaslandığında, yazılım geliştirenin işini kolaylaştırdığı görülmektedir. ASP teknolojisinde, güvenlik kontrolünün gerektiği her sayfaya ilgili kontrol kodları eklenmektedir. 

Programsal Olarak(Programmatically)

Kod içerisinden yetki kontrolü yapmakta mümkündür. Örneğin, bir forum sitesinde genel Internet kullanıcılarının yazılanları okuması ancak yeni bir konu yaratamaması istenmektedir. Dolayısıyla yeni konu isimli köprü bu tip kullanıcılara gösterilmeyecektir.

if(!User.IsInRole("public"))     // göster else

  // gösterme

KAYNAKLAR

1)  Microsoft ASP.NET Professional Projects – Hersh Bhasin, ISBN:1-931841-21-7

2)  www.microsoft.com

3)  www.4guysfromrolla.com

Makale:
ASP.NET'te Rol Tabanlı(Rol-Based) Güvenlik ASP.NET Serkan Üstündağ
  • Yazılan Yorumlar
  • Yorum Yaz
EYL
27
2004
Öok kapsamlı bir konuyu basite indirgemeye çalışmışsınız. Bundan dolayı makaleden birşey çıkarmak oldukça zor.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor