Makale Özeti

Web Uygulamalarında Güvenlik

Makale

ASP.NET Web Uygulamalarının Güvenliği -2

Window Tabanlı Kimlik Denetimi

 

Window Tabanlı Kimlik Denetimi Nedir?

 

Windows tabanlı kimlik denetimi Windows işletim sistemi üzerine kurulu çalışır ve sunucu bilgisayar üzerindeki kullanıcı listesi ile kimlik denetimi yapar. 

Windows tabanlı kimlik denetiminin kullanıcıya ağ ve web uygulaması üzerinde aynı güvenlik ayarlarını kullanma olanağını sağlar.

 

Windows Kimlik Denetiminin Etkinleştirilmesi

 

Uygulamada kullanılacak olan kimlik denetim sistemini ayarlamak için Web.config ayar dosyası kullanılır. Visual Studio .NET ile yeni bir ASP.NET Web Uygulaması oluşturulduğu zaman varsayılan kimlik denetim sistemi olarak Windows tabanlı kimlik denetim sistemi kullanılır.

 

Adım Adım Etkinleştirme

 

1. Web uygulamasında Windows tabanlı kimlik denetimi kullanılması için web.config dosyasında <system.web> düğümü içindeki <authentication> düğümünde gerekli ayarlamalar yapılmalıdır.

 

<system.web>

     <authentication mode="Windows" />

</system.web>

 

Yukarıdaki Web.config dosyası bloğu web uygulamasının kimlik denetim sistemini Windows olarak ayarlar.

 

2. Kimlik denetimi yöntemi belirlendikten sonra yetkilendirme yapılmalıdır. Yetkilendirme işlemi için <allow> ve <deny> düğümleri kullanılır.

 

<authorization>

     <deny users="?"/>

</authorization>

 

Yukarıdaki örnek <authorization> düğümünde kimlik tanıtımı olmayan (anonim) kullanıcıların uygulamaya erişimi kapatılmıştır.

 

 

 

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<system.web>

     <authentication mode="Windows" />

     <authorization>

          <deny users="?" />

     </authorization>

</system.web>

</configuration>

 
Yukarıdaki örnek Web.config dosyasında kimlik denetim sistemi olarak Windows ayarlanmış, anonim kullanıcıların erişimi kısıtlanmıştır.
 
Alt Klasör ve Dosyalar için Yetkilendirme Ayarları
 
Uygulama içerisindeki alt klasörlerin ve istenen özel sayfaların farklı yetkilendirmelere sahip olmasını sağlamak için <configuration> düğümü
 içerisindeki <location> düğümü
 ile istenilen klasör veya dosya için farklı bir yetkilendirme tanımlanabilir.
 
Aşağıda yonetim alt klasörünü için yetkilendirme tanımlaması yapılmaktadır.
 
<location path="yonetim">
     <system.web>
          <authorization>
               <allow roles="BizimSirket/Yoneticiler"/>
               <deny user="*" />
          </authorization>
     </system.web>
</location>
 
Yukarıdaki <location> düğümü ile yonetim ismindeki alt klasöre sadece Yoneticiler kullanıcı grubundaki kullanıcıların erişebileceğini, diğerlerinin ise 
erişimeyeceğini tanımlanıyor.

 

Bir Kullanıcı için İzinlerin Verilmesi ve Kısıtların Konulması
 
Windows tabanlı kimlik denetimi yapan web uygulaması uygulama çalıştırıldığı zaman ASP.NET Web.config dosyasındaki <authorization> düğümü
 içerisindeki kullanıcı listesine bakarak
 kullanıcının uygulama üzerindeki yetkilerine karar verir. 
 
<authorization>
  <deny users="?" />
</authorization>
 
Yukarıdaki <authorization> düğümü ile kimlik denetim bilgileri olmayan (anonim) kullanıcıların uygulama erişimi engellenmektedir.
 
Sadece istenen kullanıcıların uygulamaya erişimini sağlamak için istenen kullanıcıların isimleri virgul ile ayrılarak listelenir. 
 
<authorization>
     <allow users="BizimSirket\KadirSumerkent, BizimSirket\CengizHan" />   
     <deny users="*"  />
</authorization>
 
Yukarıdaki örnek <authorization> düğümü BizimSirket alan adı (domain) içerisindeki KadirSumerkent ve CengizHan kullanıcılarına erişim yetkisi vermektedir. 
Buradaki <allow> düğümü ile istenen kullanıcıların erişim yetkisi tanımlanıyor. <deny> düğümü ile de diğer tüm kullanıcıların erişimi kısıtlanıyor.
 
Birden fazla kullanıcının yetkilendirme işlemi için kullanıcı isimleri virgül ile ayrılarak tek bir düğüm içerisinde listelenebileceği gibi her bir kullanıcı ismi
için ayrı bir düğüm açılabilir. Yukarıdaki örnekte tanımlanan iki kullanıcı üzerinde aynı yetkilendirme işlemini yapmak için aşağıdaki gibi
bir <authorization> düğümü tanımlanabilir.
 
<authorization>
     <allow users="BizimSirket\KadirSumerkent" />   
     <allow users="BizimSirket\CengizHan" />
     <deny users="*"  />
</authorization>
 
ASP.NET <authorization> düğümü içerisinde kullanıcıların erişim yetkilerini kontrol ederken yetkilendirme bildirimlerinden kullanıcı ile ilk uyuşanı kullanır.
Bu sebeple istenen kullanıcılara yetki verildikten sonra mutlaka <deny> düğümü ile önceki yetkilendirme düğümleri ile uyuşmayan kullanıcılar için
kısıtlama yapılmalıdır. Bunu ise yıldız (*) karakteri vererek sağlayabiliriz.
 
Rol Tabanlı Kimlik Denetimini Kullanmak
 
Windows tabanlı kimlik denetim sisteminde rol tabanlı kimlik denetim yapılırken her kullanıcıya yetki verilmek ile uğraşmadan belli bir rol üzerinde
yetkilendirme işlemi gerçekleştirilir.
Window işletim sisteminde kullanıcı grupları tanımlanır ve kullanıcılar organizasyondaki konumlarına ve rollerine göre bu gruplara dahil edilirler.
Bir önceki örnekte gösterildiği gibi KadirSumerkent ve CengizHan kullanıcıları için ayrı ayrı yazarak erişim yetkisi tanımlanmıştır.
Her iki kullanıcınında Yazarlar kullanıcı grubuna dahil olduklarını varsayarsak, kullanıcılar için ayrı ayrı tanımlama yapmaya gerek yoktur.
Bu durumda sadece Yazarlar kullanıcı grubu üzerinde yetkilendirme işlemi yapılması yeterli olacaktır.
Windows işletim sistemi standart olarak bazı kullanıcı grupları ile beraber gelmektedir. Kurulan bazı büyük çaplı uygulamalar otomatik olarak
kullanıcı grubu oluşturabilmektedir. Windows standart olarak Administrators, Users, Guests gibi gruplar gelmektedir. 
Windows işletim sisteminde kullanıcı grubu tanımlamak için Bilgisayar Yönetimi (Computer Management) konsolundan yeni bir grup tanımlanabilmektedir.
 
Bir kullanıcı grubu için yetkilendirme işlemi yapmak için <authorization> düğümüne <roles> düğümü eklenmelidir.  
Ve <roles> düğümü içerisinde istenen alan adı üzerindeki kullanıc grubu adı belirtilir.
 
<authorization>
     <allow roles="BizimSirket\Yazarlar" />
     <deny users="*"  />
</authorization>
 
Yukarıdaki örnek <authorization> düğümü ile uygulamaya sadece Yazarlar kullanıcı grubuna dahil olanların girebilmesi sağlanmaktadır.
 
Yukarıda verilen örnekler üzerindeki users ve roles özelliklerinin kullanımı <deny> içinde aynı şekildedir. 
 
Örneğin sadece Stajerler grubundakilerin ve anonim erişim ile bağlanmak isteyenlerin uygulamayı kullanmasının kısıtlanması,
 diğer tüm kullanıcıların uygulamaya erişebilmesini sağlayan bir <authorization> düğümü aşağıdaki gibi olmalıdır.
 
<authorization>
     <deny roles="BizimSirket\Stajerler" />
     <deny user="?" />
     <allow user="*" />
</authorization>
Kullanıcı Bilgisini Okumak
 
Uygulamayı kullanan bir kullanıcı kimlik bilgilerini doğrulattıktan ve yetkilendirme ayarlarına göre erişim yetkisi aldıktan sonra uygulamaya giriş yapmış olur. 
 
Uygulamaya giriş yapmış olan kullanıcınınn bilgilerini okumak User nesnesinin Identity özelliği kullanılır.
 Identity özelliği kullanıcı adı ve rol bilgilerini içeren bir nesne döndürmektedir.
 
lblUser.Text = User.Identity.Name
lblAuthenticationType.Text = User.Identity.AuthenticationType
lblIsAuthenticated.Text = User.Identity.IsAuthenticated
 
Yukarıdaki kod örneğinde kullanıcının adı, IIS kimlik denetim mekanizması ismi ve kimlik denetiminde başarılı bir şekilde 
geçip geçmediğine dair sonuçlar Label Web Sunucu Kontrollerine yazdırılmaktadır.
 

Cengiz HAN
Microsoft ASP.NET MVP
msn (ve email) : cengiz@cengizhan.com
e-mail : cengizh@yazgelistir.com