23 Mayıs 2012 Çarşamba

C# da "Forms Authentication" ile uygulamalar arası geçişler ve yetkilendirmeler

Uygulamalarınızın arasında tek bir giriş(login) ekranından giriş yapıp, geçişler yapmanız için yapmanız gerekenler çok basit.
1- Web.config dosyasında gerekli ayarları yapmak
2- Uygulamalarınızın aynı makina üzerinde olduğundan emin olmak.
3- Her uygulamanızda aslında bir giriş sayfasına sahip olmak

Gelelim web.config dosyasındaki yapılacak düzenlemelere
1.1 - Gelen genel kullanıcılar kısıtlayalım

  <system.web> içindeki alandaki authorization alanına tüm genel kullanıcıları yasakladığınıza dair aşağıdaki kodu ekliyoruz.
    <authorization>
      <deny users="?" />     
    </authorization>


Eğer herkese izin vermeniz gerekirse burayı boş geçebilirsiniz
    <authorization/>

1.2 - Uygulamada genel kullanıcılara izin verilecek dosyalara ve dökümanlara karar vermelisiniz veya bazı rollere izin giriş için izin verecek olabilirsiniz. Bunları <system.web/> den sonra location alanlarında belirleyebilirsiniz. Herkesin sitenize girmesini engellediyseniz, en azından giriş sayfasındaki resimlerin ve giriş sayfasının girişe açık olması gerektiğini hatırlayın.

<location path="image">
    <system.web>
      <pages theme="Office2003Blue">
      </pages>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>


 Eğer bazı kullanıcılara veya rollere uygulamayı açacaksanız, aşağıdaki gibi ayarlamaları yapmalısınız.
<location path="IKSayfalari">
  <system.web>
    <authorization>
      <allow roles="IK" />
      <deny users="*" />
    </authorization>
   </system.web>
</location>


Bu rolleri tabii ki authentication cookie içinde tanımlamanız gerekiyor. Buraya bir parantez açıp bunu da ekleyeyim.

 FormsAuthentication.SetAuthCookie(kullaniciAdi, false);
 FormsAuthenticationTicket ticket1 = new FormsAuthenticationTicket(
                 1,                                                          // versiyon
                 this.TextBox_username.Text.Trim(),   // kullanıcı adı
                 DateTime.Now,                                    // şimdiki zaman, cookienin oluşturulduğu zaman
                 DateTime.Now.AddMinutes(10),         // 10 dakika sonra cookie etkisiz kalacak
                 false,                                                    // cookie persistent değil
                 "IK"                                                    // içinde tutulacak kullanıcı rolü                
                 );
          HttpCookie cookie1 = new HttpCookie(
            FormsAuthentication.FormsCookieName,
            FormsAuthentication.Encrypt(ticket1) );
          Response.Cookies.Add(cookie1);


Şimdi sıra geldi her uygulamada aynı tanımlamanız gereken machine key alanını eklemeye

  <authentication mode="Forms">
      <forms name="UygulamayaAitFormAlani" loginUrl="index.aspx" cookieless="UseCookies" protection="All" timeout="30" slidingExpiration="false" enableCrossAppRedirects="false" requireSSL="false" />
    </authentication>
    <machineKey validationKey="BurayaBirKeyBelirliyorsunuz" decryptionKey="BurayadaBirÇözücüKeyBelirliyorsunuz" validation="SHA1" />
  
Bu alandaki değerleri geçiş sağlayacağınız her uygulamada aynı tutuyorsunuz.
Test yapabilirsiniz, kolay gelsin :)

Hiç yorum yok:

Yorum Gönder