Web.Config Authentication

Web uygulamalarında üyelik sistemine ait veriler veritabanlarında saklanmaktadır. Tabi ki bu bilgilerin bir web servisinden veya metin tabanlı dosyadan getirilmesi gibi istisnai durumlarda olabilir. ASP.NET uygulaması geliştirirken bu istisnai durumlardan biri de üyelik bilgilerinin web.config'de saklanmasıdır.

"web.config dosyasında kullanıcı adı ve şifre bilgilerini saklamanın mantığı ne ola ki?" sorusu akla gelebilir. Geliştirdiğimiz uygulamada sadece birkaç tane kullanıcımız varsa, bu kullanıcılarla ilgili çok detaylı bilgiler saklama ihtiyacımız yoksa, veritabanında kullanıcılar için tablolar açmak, select, insert vb. işlemler için sorgular yazmak istemeyebiliriz. Bu tip bir durumda aslında web.config dosyası ve FormsAuthentication mekanizması işimizi oldukça kolaylaştırıyor.

Basit bir örnekle web.config dosyası üzerinden authentication işlemlerini nasıl yönetebileceğimizi inceleyelim. web.config dosyasında system.web > authentication > forms > credentials elementi altına <user> elementleri ile tanımlayacağımız kullanıcı bilgileri aşağıdaki kod parçasında görülmektedir.

web.config
  <system.web>
    <authentication mode="Windows">
      <forms>
        <credentials passwordFormat="Clear">
          <user name="arda" password="12345"/>
          <user name="semih" password="123qwe"/>
        </credentials>
      </forms>
    </authentication>
  </system.web>

<credentials> elementi içerisindeki passwordFormat bilgisi kullanıcılar için tanımlanan şifrenin hangi formatta saklanacağını belirliyor. Kullanabileceğimiz formatlar Clear, MD5, SHA1. Burada Clear kullandık, yani şifreler aynen yazıldığı gibi olacak, herhangi bir hashleme yöntemi yok. Eğer kullanıcının şifresini MD5 veya SHA1 formatıyla hashlersek, hashlenmiş şifre metnini <user> elementi içerisindeki password niteliğine atamamız gerekiyor. web.config dosyasının başkaları tarafından görüntülenmesi ve kullanıcıya ait şifrenin öğrenilmesini istemiyorsak tabi ki MD5 veya SHA1 kullanmalıyız. Bir metnin MD5 veya SHA1 formatındaki değerini elde etmek için FormsAuthentication.HashPasswordForStoringInConfigFile metodunu kullanabilirsiniz.

Kullanıcıların doğrulanması için ise FormsAuthentication sınıfına ait Authenticate metodunu kullanmamız gerekiyor. Bu metot kullanıcı adı ve şifresi bilgilerini alarak, web.config'de yer alan bilgilerle karşılaştırma yapıyor ve bilgiler doğru ise boolean tipinden true, değilse false değeri döndürüyor. Aşağıdaki örnek kodlarla böyle bir kontrolü gerçekleştirebiliriz.

Login.aspx
public partial class Login : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FormsAuthentication.Authenticate(txtUsername.Text, txtPassword.Text))
            FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, false);
        else
            Response.Write("Hatalı kullanıcı adı veya şifre");
    }
}

Son bir uyarı; web.config dosyasının güncellenmesi uygulamanın restart edilmesine sebep olmaktadır. Bu nedenle, özellikle canlı ortamlarda <user> elementi içerisindeki kullanıcı bilgilerini sıklıkla değiştirirken uygulamanın yeniden başlatılacağını unutmayın.

Alıntı