Web.config Dosyasından Authentication

Merhaba. Web uygulamalarında üye bilgileri genellikle veritabanında saklanır. Çünkü birden fazla kullanıcı ve kullanıcılara ait detaylı bilgiler (e-posta adresi, doğum tarihi gibi) vardır. Peki bizim uygulamamızda sadece bir veya birkaç kullanıcı varsa ve bu kullanıcılara ait detaylı bilgilere ihtiyacımız yoksa. Yani sadece kullanıcı adı ve şifre bilgilerini tutmak yeterli ise bu bilgileri Web.config dosyasında saklayabiliriz. Bu sayede veritabanı kullanmadan kullanıcı işlemlerini gerçekleştirmiş oluruz. Şimdi Web.config dosyasında bu bilgileri nasıl barındıracağımıza bakalım.

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880">
      <credentials passwordFormat="Clear">
        <user name="admin" password="1234"/>
      </credentials>
    </forms>
  </authentication>
</system.web>

passwordFormat: Şifrenin hangi formatta tutulacağını belirtir. Clear, MD5 ve SHA1 olmak üzere üç değer alır. Clear seçili ise şifre düz metin olarak saklanır. Yani göründüğü gibi. SHA1 dersek şifre 7110EDA4D09E062AA5E4A390B0A572AC0D2C0220 şeklinde hash'lenerek saklanır. MD5 de SHA1'e benzer yapıda şifreyi saklar. Eğer şifreyi Web.config dosyasından sadece biz göreceksek Clear formatında saklayabiliriz. Ama Web.config dosyasındaki şifrenin başkaları tarafından öğrenilmesini istemiyorsak şifremizi SHA1 veya MD5 formatında saklamalıyız. Düz metin bir şifreyi bu formatlardan birine çevirmek için ise şu metodu kullanabiliriz:

string hashed_password = FormsAuthentication.HashPasswordForStoringInConfigFile("düz_metin_şifre""SHA1");

Kullanıcı Doğrulaması (Login)

Kullanıcı doğrulaması için ise FormsAuthentication sınfına ait Authenticate metodu kullanılır. Bu metod true veya false değerini alır. Eğer girilen bilgiler kullanıcı ile eşleşiyor ise true, değilse false değerini alır.

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (FormsAuthentication.Authenticate(model.UserName, model.Password))
        {
            FormsAuthentication.RedirectFromLoginPage(model.UserName, false);
        }
        else
        {
            ModelState.AddModelError("""Kullanıcı Adı veya Şifre Hatalı.");
        }
    }

    return View(model);
}

Kullanıcı Adı veya Şifrenin Değiştirilmesi

Eğer kullanıcı adı veya şifreyi değiştirmek istiyorsak:

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~/");
AuthenticationSection authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication");
FormsAuthenticationUserCollection formsAuthenticationUsers = authenticationSection.Forms.Credentials.Users;
formsAuthenticationUsers[0].Name = "yeni_kullanıcı_adı";
formsAuthenticationUsers[0].Password = "yeni_şifre";

adımlarını izleyebiliriz. Bu arada Web.config dosyasında yapılan her değişikliğin uygulamanın restart edilmesine neden olduğunu da hatırlatalım.

Mehmet YAYLACI
YORUM FORMU