Makale Özeti

Bu yazımda kullanıcı tanımlama ve yetkilendirme işlemlerin ASP.Net ile nasıl gerçekleştirilebileceklerini işleyeceğim.İçeriği iki döküman olarak düzenledim.

Makale

Asp.Net Güvenlik

KullanIcI TanImlama (Authentication) ve
Yetkİlendİrme (Authorization)

- 1/2

Bu yazımda kullanıcı tanımlama ve yetkilendirme işlemlerin Asp.Net ile nasıl gerçekleştirilebileceklerini işleyeceğim.İçeriği iki döküman olarak düzenledim.

İlk bölümde
1.Asp.Net ile ilgili olarak tanımlama ve yetkilendirme kavramları üzerinde duracağım.
2.Web uygulamalarına web.config dosyasını kullanarak tanımlama ve yetkilendirme işlemlerinin nasıl gerçekleştirilebileceği üzerinde duracağım.

İkinci bölümde
1
Form bazında yetkilendirmenin nasıl yapılandırılabileceği irdeleyeceğim.
2.Son olarak üçüncü parti servislerin nasıl entegre edilebileceğini inceleyeceğim.

Asp.Net ile güvenliğin nasıl sağlandığını kavrama adına, kullanıcıların kaynaklara nasıl erişeceğini belirlemede kullanılan temel üç temel kavramı incelememiz gerek.

1.Tanımlama (authentication)
2.Yetkilendirme (authorization)
3. Kullanıcı tipleri belirleme (impersonation)

1.Tanımlama; kullanıcının kimliğinin tespit edilmesi işlemidir. Kullanıcının kimliği LDAP sunucularından, veritabanından, bir Xml dosyasından hatta bir web servisinden bile takip edilebilir. Microsoft Passport, kullanıcı tanımlamasında kullanılan web servislerine güzel bir örnektir. .Net Framework ile birlikte kullanmak üzere bir çok tanımlama mekanizması tasarlanmıştır. Asp.Net, kullanıcı tanımlamada kullanılan Windows, Cookie ve Passport güvenlik modlarını standart olarak destekler.

2.Yetkilendirme işlemi ise bir istekte bulunan kullanıcının talep ettiği kaynağa erişim hakkı olup olmadığının tespit edilmesi işlemidir. Bu işlem genelde önceden tespit edilen kullanıcı rolleriyle sağlanır. Örneğin bir sitede yönetim işlemlerinin yapıldığı kısma sadece ‘administrator’ rolündeki kullanıcıların erişmesini sağlanabilir. Rolleri son kullanıcı , editor, satış elemanı gibi artırmak mümkün.

3.Kullanıcı tipleri belirleme (impersonation) işlemi ise uygulamaya IIS ten herhangi bir istek geldiğinde gerçekleşir. Kullanıcının kaynağa erişip erişmeyeceği oluşturulan tipin göre yetkilerine göre belirlenir. Böylelikle bir uygulamada ‘GenelKullanıcılar’ ve ‘Yöneticiler’ olarak iki tip belirlenebilir. Böylelikle uygulamadan istekte bulunan istemcilerin yetkilendirme işlemi sırasında elde edilen haklara göre bu iki tipten biriymiş gibi davranması sağlanabilir.

Web.config ve Güvenlik
Asp.Net tarafından kullanılan iki Xml ayar dosyası vardır. Bunlar machine.config ve web.config dosyalarıdır. Bu iki dosyanın yapıları tamamen aynıdır. Fakat machine.config dosyası tüm web uygulamaları için geçerli varsayılan ayarları barındırırken web.config belli bir uygulamaya ait özel ayarları içerir. Eğer varsayılan ayarları değiştirmediyseniz machine.config dosyası “C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG” klasöründedir. Web.config dosyası ise her uygulamanın kendi klasöründedir. Web.Config doyasının <system.Web> bölümündeki ayarları kullanarak belli koşulların sağlanmasını mümkün kılabilirsiniz. Web.config dosyasında yaptığınız dosyanın bulunduğu klasöre ve bu klasörün tüm alt klasörlerine etki edecektir.

Web.Config dosyasında <systemWeb> bölümü uygulama için güvenlik profillerini saptar.Web.config dosyasının güvenlik bölümünün genel yapısı şöyledir:

<?xml version=”1.0” encoding=”utf-8” ?> 
      <configuration> 
        <location path=”[Belli bir dosya ya da klasör yolu]”> 
          <system.Web> 
          <authentication mode=”[Windows/Forms/Passport/None]”> 
            <forms name=”[isim]” loginUrl=”[url]” protection=”[All, None,Encryption, Validation]” timeout=”[dakika]” path=”[yol]” > 
              <credentials passwordFormat=”[Clear, SHA1, MD5]”> 
                <user name=”[Kullanıcı Adı]” password=”[şifre]”/> 
              </credentials> 
            </forms> 
            <Passport redirecturl=”internal” /> 
          </authentication> 
          <authorization> 
            <allow users=”[Virgülle ayrılmış kullanıcılar]” roles=”[Virgülle ayrılmış roller]” verb=”[GET, POST, HEAD]”/> 
            <deny users=”[ Virgülle ayrılmış kullanıcılar]” roles=”[Virgülle ayrılmış roller]” verb=”[GET, POST, HEAD]”/>

          </authorization> 
          <identity impersonate=”[true/false]” name=”[Domain\Kullanıcı]” password=”[Domain\Kullanıcı şifresi]”/> 
          </identity> 
          <system.Web> 
        </location> 
      </configuration>

* Web.config dosyası büyük-küçük harf duyarlıdır.

Bazı ayarların açıklamaları

<authentication mode= ”Windows”>
Tanımlamanın modunu belirler. Forms, Passport, None seçeneklerinden biri kullanılabilir. Bu ayar uygulamanın kök dizinin altında bulunan bir dizinde ayarlanamaz.

<forms name=”.ASPXAUTH”> Cookie ‘nin tutulması için herhangi bir string ifade belirtir.. Cookie ismi olarak istediğiniz bir değer kullanabilirsiniz.

<forms login Url=”login.aspx”> Eğer mod Forms olarak ayarlandıysa ve geçerli bir cookie yoksa, yönlendirme yapılacak sayfayı belirtir.

<forms protection= ”None”> Cookie nin içindeki verinin şifrelenip şifrelenmeyeceğini belirtir.

<forms path=”/”> Cookie nin tutulacağı yolu belirtir

<credentials passwordFormat=”sha1”> Kullanıcı niteliğini şifrelerken kullanılacak algoritmayı belirler. Bu ayar şifreleme yapmaz. Yapılacak şifreleme için ortam sağlar.

<Passport redirecturl= ”url”>
Bu ayar mod olarak passport seçilmişse kullanılır. Bir sayfada tanımlama gerekiyor ve kullanıcı passport a giriş yapmadıysa istemcinin yönlendirileceği adresi belirtir.

<allow users=”*”>
İzin verilen kullanıcıların virgülle ayrılmış listesi belirlenir. * karakteri tüm kullanıcıları ? karakteri ise tanımlanmamış kullacıları ifade eder.

<allow roles= > İzin verilen rollerin virgülle ayrılmış listesi belirlenir. * karakteri tüm rolleri ifade eder.

<deny users=””>
İzin verilmeyen kullanıcıların virgülle ayrılmış listesi belirlenir. * karakteri tüm kullanıcıları ? karakteri ise tanımlanmamış kullacıları ifade eder.

<deny roles=””> İzin verilmeyen rollerin virgülle ayrılmış listesi belirlenir. * karakteri tüm rolleri ifade eder.

<identity impersonate=”false”>
Bu seçenek True olarak ayarlanırsa ullanıcı isimleri ve şifreleri NT kullanıcı gruplarıyla karşılaştırılarak NTFS erişim kontrol listesine uygun yetkilendirme yapılır.

Not:Web.config ile yapılan ayarlar önceden belirlenmiş ve xspisapi.dll tarafından kontrol edilen bazı kaynaklara etki eder. Bu dll in kontrol etmediği txt,html,gif gibi dosyalar web.config tarafından güvenlik kapsamına alınmazlar. Bu tarz dosyaları da güvenlik kapsamına almak için IIS in yönetici araçlarını kullanarak , bu tüleri register etmelisiniz. (anlam karmaşıklığı olmasın diye bazı terimleri özellikle oldukları gibi kullanıyorum.)Ya da web.config de <location> tagını belli dosya ve klasörleri güvenlik kapsamına almak için kullabilirsiniz.

Temel örnekler:
Aşağıdaki örnek ‘Ali’ kullanıcısının içeriğe erişmesine izin verirken ‘Veli’ kullanıcısını ve tanımlanmamış kullanıcıları engeller.

<?xml version=”1.0” encoding=”utf-8” ?> 
      <configuration> 
        <system.Web> 
        <authorization> 
          <allow users=”Ali” /> 
          <deny users=”Veli” /> 
          <deny users=”?” /> 
        </authorization> 
        <system.Web> 
      </configuration>

 Kullanıcı isimleri virgülle ayrılarak belirtilebilir;
<allow users=”Ali, Rıza, Domainİsmi\Murat” />
* Domain kullanıcılarının nasıl belirtildiğine dikkat edin.

Aşağıdaki örnek kod ise, Ali kullanıcısı hariç hiçbir kullanıcıya izin vermemektedir.

<?xml version=”1.0” encoding=”utf-8” ?> 
      <configuration> 
        <system.Web> 
        <authorization> 
          <allow users=”Ali” /> 
          <deny users=”*” /> 
        </authorization> 
        <system.Web> 
      </configuration>

İstek tiplerini kısıtlama:
Kullanıcıların Get, Post, Head gibi istekleri bazında da kısıtlama uygulanabilir;

<?xml version=”1.0” encoding=”utf-8” ?> 
      <configuration> 
        <system.Web> 
        <authorization> 
          <allow verb=”GET” users=”Ali” /> 
          <allow verb=”POST” users=”*” /> 
          <deny verb=”GET” users=”*”/> 
        </authorization> 
        <system.Web> 
      </configuration>

* Bu kısıtlama kriterlerine uygun olmayan bir kullanıcı kaynaklara erişmek istediğinde (varsayılan değiştirilmemişse 401 kodlu) hata oluşur.

Yazının ikinci bölümünde buluşmak üzere.

Bu arada yardımlarından dolayı Engin Çetinkayaya teşekkürlerimi iletiyorum.

Kâsım GÜLCAN
SQLNedir?com