Makale Özeti

Uygulamalarda en çok kullanılan kullanıcı yetkilendirme mekanizmalarının başında form bazında cookie kullanılması gelir. Bu yaklaşımda, standart bir web formu ve Web.config dosyasındaki birkaç küçük ayarı düzenlemek yetkilendirme için yeterli olur.

Makale

Form Bazında Yetkilendirme

KullanIcI TanImlama (Authentication) ve
Yetkİlendİrme (Authorization) - 2/2

Form Bazında Yetkilendirme
Uygulamalarda en çok kullanılan kullanıcı yetkilendirme mekanizmalarının başında form bazında cookie kullanılması gelir. Bu yaklaşımda, standart bir web formu ve Web.config dosyasındaki birkaç küçük ayarı düzenlemek yetkilendirme için yeterli olur.

Aşağıda uygulayacağımız örnekte form bazında kullanıcı denetimini gerçekleştireceğiz.

İlk adım Web.config dosyamızı aşağıdaki gibi düzenlemek olacak;

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

  <system.Web>
        <authentication mode="Forms">
             <forms name="CookieFormApplication" loginUrl="login.aspx" />
       </authentication>

       <authorization>
             <deny users="?" />
       </authorization>

       <sessionState mode="InProc" cookieless="false" timeout="20"/>
  </system.Web>

</configuration>

Bu sayede yetkilendirmemizin form bazında gerçekleştirileceğini ve herhangi bir web forma ulaşmak isteyen yetkisiz kullanıcıların giriş yapabilmesi için login.aspx dosyasına yönlendirilmesini sağlıyoruz.

Kullanıcı listesini yine Users.xml dosyasından kontrol edeceğiz. Dosyanın içeriği aşağıdaki gibi olacak;

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

<Users>
 <User>
   <UserEmail>ali@email.com</UserEmail>
   <UserPassword>ali</UserPassword>
 </User>

 <User>
   <UserEmail>veli@email.com</UserEmail>
   <UserPassword>veli</UserPassword>
 </User>

</Users>

Şimdi sıra login.aspx dosyasını oluşturmaya geldi. Login.aspx formu kullanıcı isimlerini ve şifrelerini toplayacak ve bunları xml dosyasındaki bilgilerle kıyaslayacak. Eğer kullanıcının kaydı xml dosyasında bulunursa yetkilendirme cookie si kullanıcıya gönderilecek. Eğer kayıt bulunamazsa yeni kullanıcı eklenebilecek bir sayfaya yönlendirme yapılacak.

login.aspx dosyasının içeriği;

<%@ Import Namespace=System.XML %>
<%@ Import Namespace=System.IO %>
<%@ Import Namespace=System.Web.Security  %>
<%@ Import Namespace=System.Data.SqlClient %>
<%@ Import Namespace=System.Data.OleDB %>
<%@ Import Namespace=System.Data %>
<%@ Page Language=vb debug=True%>

<HTML>  
<HEAD>
             <TITLE>Cookie ile yetkilendirme </TITLE>
<SCRIPT language=VB RUNAT="Server">
 Sub btnLogin_Click(ByVal Sender As Object, ByVal E As EventArgs)
    Select Case Denetle(txtUserName.Text, txtPassword.Text)
        Case "Dogrulandi"
            FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkPersistForms.Checked)
        Case "SifreYanlis"
            lblMessage.Text = "Yetkilendirme işlemi " & txtUserName.Text & " kullanıcısı için gerçekleştirilemedi"
        Case "KullaniciYok"
            Yeni kullanıcı eklenebilecek bir sayfaya yönlendirme yapılabilir
            Response.Redirect("ekle/kullaniciEkle.aspx?kullanici= & txtusername.text) gibi..

            lblMessage.Text = "Yeni kullanıcı eklenecek sayfaya yönlendirme yapılabilir"
    End Select
End Sub

Sub btnAddNewUser_Click(ByVal Sender As Object, ByVal E As EventArgs)
    Yeni kullanıcı eklenebilecek bir sayfaya yönlendirme yapılabilir
    Response.Redirect("adduser/adduser.aspx?username=Enter User Name")
End
Sub

Function Denetle(ByVal username As String, ByVal password As String) As String
    Dim cmd As String
    cmd = "UserEmail=" & username & ""
    Dim ds As New DataSet
   Dim fs As New FileStream(Server.MapPath("users.xml"), FileMode.Open, FileAccess.Read)

   Dim reader As New StreamReader(fs)
    Dim pass As String
    Dim user As String
    ds.ReadXml(reader)
    fs.Close()

    Dim users As DataTable
    users = ds.Tables(0)
    Dim Matches() As DataRow
    Matches = users.Select(cmd)

    If Matches.Length > 0 Then
        Dim row As DataRow
        row = Matches(0)
        pass = row.Item("UserPassword")
        user = row.Item("userEmail")
        If pass = password Then
            Return "Dogrulandi"
        Else
            Return "SifreYanlis"
        End If
    Else
        Return "KullaniciYok"
    End If

End Function
            </SCRIPT>

</HEAD>
<BODY>
<FORM id=WebForm1 method=post RUNAT="server">
<P><STRONG>Form bazında kullanıcı yetkilendirme</STRONG> </P>
<P>Lütfen email adresinizi ve şifrenizi yazıp Giriş tuşuna basınız.<BR>
                           <BR>
                           <ASP:LABEL ID="lblMessage" RUNAT="SERVER"></ASP:LABEL></P>
                     <P>Email <ASP:TEXTBOX ID="txtUserName" RUNAT="SERVER"
                           TOOLTIP="Please enter your Username here"></ASP:TEXTBOX>
                    </P>
                    <P>Şifre&nbsp;
                          <ASP:TEXTBOX ID="txtPassword" RUNAT="SERVER"
                           TEXTMODE="Password"
                           TOOLTIP="Please enter your password here."></ASP:TEXTBOX>
                    </P>
                     <P><ASP:CHECKBOX ID="chkPersistForms" RUNAT="SERVER"
                           TEXT="Cookie yi sürekli tutturma"></ASP:CHECKBOX>
                    </P>
                     <P><ASP:BUTTON ID="btnLogin" RUNAT="SERVER" TEXT="Giriş"
                           ONCLICK="btnLogin_Click"></ASP:BUTTON><ASP:BUTTON ID="btnAddUser"
                           RUNAT="SERVER" TEXT="Yeni Kullanıcı" ONCLICK="btnAddNewUser_Click"></ASP:BUTTON>
                    </P></FORM>
       </BODY>
</HTML>

Bu sayfa kullanıcının email adresini ve şifresini girmesini sağlayan kontroller sunar.  Giriş butonuna basılınca btnLogin_Click() metodu sayesinde users.xml dosyasının içinde girilen bilgileri arar. Metod, girilen email adresinin var olup olmadığını, varsa şifrenin doğru olup olmadığını kontrol eder. Şifre de doğruysa  FormsAuthentication.RedirectFromLoginPage () metoduyla kullanıcıyı login sayfasına gönderen sayfaya geri gönderirken yetkilendirme cookie sini de gönderir.

Bu küçük uygulamayı test etmek için default.aspx dosyasını aşağıdaki gibi oluşturun ve bütün dosyaları bir klasörde toplayıp (default.aspx, login.aspx, users.xml, Web.config) bu klasörü IIS’ten virtual directory olarak belirleyin.

<%@ Page Language="vb"%>
<HTML>
      <HEAD>
            <SCRIPT Language="VB" Runat="Server">
Sub btnLogout_Click(ByVal Sender As Object, ByVal E As EventArgs)
    FormsAuthentication.Signout()
    Response.Redirect("default.aspx")
End Sub
            </SCRIPT>
      </HEAD>
      <BODY>
            <H1>
                  Yetkilendirme gerçekleşti ! </H1>
            <FORM Runat="Server">
                  <asp:Button id="btnLogout" runat="SERVER" Text="Çıkış" OnClick="btnLogout_Click"></asp:Button>
                  <P></P>
            </FORM>
      </BODY>
</HTML>

Böylelikle form bazında cookie ile nasıl yetkilendirme yapıldığını incelemiş olduk.

Kâsım GÜLCAN
SQLNedir?com