Form Tabanlı Kimlik Denetimi

.NET programcılığı Form Tabanlı Kimlik Denetimi Programlama Dilleri hakkında bilgi paylaş; Özet Bu makale, aspx sayfalarında kullanıcıların form tabanlı kimlik denetimlerinin System.Web.Security namespace'ini kullanı...
Cevapla
WebMasTer SiTeSi
 
Seçenekler
  #1  
Arama 24-01-2008, 01:54
Banlı
Üyelik Tarihi: 18/09/07
Mesajlar: 1.551
 
     WS-Ticareti: (1)
Blog Yazıları: 1
Teşekkürleri: 0
20 Msg. 27 Tşkr.
Rep Gücü: 0 B737 rep gücü epey yüksek

Form Tabanlı Kimlik Denetimi

Özet
Bu makale, aspx sayfalarında kullanıcıların form tabanlı kimlik denetimlerinin System.Web.Security namespace'ini kullanılarak nasıl yapıldığını anlatmaktadır.

Gereksinimler
Microsoft Visual Studio.NET
Microsoft SQL Server
Microsoft Internet Information Server (IIS) version 5.0 veya üst versiyonları
Microsoft ASP.NET birçok kimlik denetimi mekanizmasını desteklemektedir.Bunlardan biri de Form Tabanlı Kimlik Denetimi ( Forms Based Authentication ) dir.Şimdi bu mekanizmanın işleyişine bir göz atalım.

İstemci bilgisayarı sunucudan bir istekte bulunduğunda, bu istek önce IIS e iletilir.Ardından istek ASP.NET Forms Authentication Module ( ASP.NET Kimlik Denetim Birimi ) tarafından istemcinin geçerli bir cookie 'ye sahip olup olmadığı kontrol edilir.Eğer istemci geçerli bir cookie 'ye sahip değilse (yani siteyi ilk kez ziyaret ediyorsa), istemci bir login sayfasına yönlendirilir.



İstemci yönlendirilen login sayfasında kendinden istenen kullanıcı adı ve şifresini girdikten sonra bu bilgiler sunucu veritabanında kontrol edilir.Eğer girilen veriler veritabanında bulunuyorsa bir cookie oluşturularak istemcinin bilgisayarına istenen sayfa gönderilir.Aksi halde istemcinin sayfaya erişimi engellenir.İstemcinin site içersinde yaptığı diğer tüm isteklerde bu cookie aracılığı ile gerçekleşir.

Şimdi tüm bu bilgiler ışığında, aşağıdaki uygulamamıza geçelim

1.Yeni ASP.NET Web Application Oluşturalım
Visual Studio.NET / New Project / Web Application seçerek formbased_authentication isimli uygulamamızı oluşturalım.
WebForm.aspx sayfasının adını default.aspx olarak değiştirelim.

2.Web.Config Dosyasındaki Güvenlik Ayarlarını Değiştirelim
Project Explorer 'dan Web.Config 'i seçelim
Authentication mode'unu Forms yapalım.
Aşağıdaki kodu kopyalayıp web.config dosyamızın authentication tag'lerinin yerine yapıştıralım.( Sağ tuş Paste As HTML olarak).Basitçe anlaşılacağı gibi bu kod giriş için yönlendirilecek sayfa bilgilerini (logon.aspx) içermektedir.
Bkz.Resim1

<authentication mode="Forms">
<forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"
protection="All" path="/" timeout="30" />
</authentication>

Authorization kısmında anonim bir kullanıcının ( anonymous ) girişini engelleyelim.

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



3.Uygulamamız için bir kullanıcı detaylarının yer aldığı bir tablo yaratalım
Bu bölümde içersinde kullanıcı adlarının ve şifrelerinin bulunacağı Pubs veritabanında bir tablo yaratacağız.

Aşağıdaki kodları notepad ' e yapıştırıp db.sql olarak kaydedelim.
Daha sonra SQL Server / Query Analyzer ' da bu dosyayı açalım ve Pubs veritabanını seçtikten sonra kodu çalıştıralım.Bu kod bize Pubs veritabanı altında Users adlı bir tablo açıp, ilk 3 kayıtı ekleyecektir.

if exists (select * from sysobjects where id =
object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Users]
GO
CREATE TABLE [dbo].[Users] (
[uname] [varchar] (15) NOT NULL ,
[Pwd] [varchar] (25) NOT NULL ,
[userRole] [varchar] (25) NOT NULL ,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] WITH NOCHECK ADD
CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
(
[uname]
) ON [PRIMARY]
GO
INSERT INTO Users values('user1','user1','Manager')
INSERT INTO Users values('user2','user2','Admin')
INSERT INTO Users values('user3','user3','User')
GO



4.Logon.aspx sayfasını oluşturalım
İstemcinin kullanıcı adını ve şifresini gireceği sayfayı oluşturalım.
Yeni bir uygulamamıza yeni bir Web Form ekleyelim ve adını logon.aspx olarak değiştirelim.
Aşağıdaki kodları logon.aspx sayfamızın html bloğuna yapıştıralım.

<h3>
<font face="Verdana">Logon Sayfası...ASPNedir?com</font>
</h3>
<table>
<tr>
<td>Email:</td>
<td><input id="txtUserName" type="text" runat="server"></td>
<td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
Display="Static" ErrorMessage="*" runat="server"
ID="vUserName" /></td>
</tr>
<tr>
<td>Şifre:</td>
<td><input id="txtUserPass" type="password" runat="server"></td>
<td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
Display="Static" ErrorMessage="*" runat="server"
ID="vUserPass" />
</td>
</tr>
<tr>
<td>Beni Hatırla:</td>
<td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
<td></td>
</tr>
</table>
<input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
<asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />


Code-Behind çalıştığımız için F7 tuşuna basarak logon.aspx.vb sayfamızı getirelim ve hemen başına kullanacağım class lara ait namespace'leri ekleyelim.

Imports System.Data.SqlClient
Imports System.Web.Security

Kullanıcı adının ve şifresinin kontrol edilip, veritabanında bulunup bulunmamasına göre true yada false değer döndürecek olan bir Function yapalım
Bkz.Resim2

Function ValidateUser(uid As string, passwd As string) As Boolean
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim dr As SqlDataReader
Dim deger As Boolean = False
cnn = New SqlConnection("server=localhost; trusted_connection=true; database=Pubs;")
cmd = New SqlCommand("Select * from users where uname = '" & uid & "'", cnn)
cnn.Open()
dr = cmd.ExecuteReader()
While (dr.Read())
If Strcomp(dr.Item("Pwd"), passwd, 1) = 0 Then
deger = True
End If
End While
cnn.Close()
ValidateUser = deger
End Function


İstemci, logon butonuna tıkladığında ValidateUser fonksiyonunun döndürdüğü değer true ise kullanıcıya onay verilerek default.aspx sayfasına yönlendirilmektedir.Bu değer false ise, istemci tekrar logon.aspx sayfasına yönlendirilir.

Private Sub cmdLogin_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles cmdLogin.ServerClick
If ValidateUser(txtUserName.Value,txtUserPass.value) Then
FormsAuthentication.RedirectFromLoginPage(txtUserN ame.Value, _
chkPersistCookie.Checked)
Else
Response.Redirect("logon.aspx", True)
End If
End Sub


default.aspx sayfamıza istemcinin signout olması için bir buton koyalım.Bunun için önce default.aspx sayfasının html kısmına aşağıdaki kodu ekleyelim.

<input type="submit" Value="SignOut" runat="server" id="cmdSignOut">

F7 tuşuna basarak default.aspx.vb kod sayfasının en başına System.Web.Security namespace'ini ekleyelim
Imports System.Web.Security

Son olarak da butona tıklandığında istemciyi signout yapacak kodumuzu ekleyelim.

Private Sub cmdSignOut_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles cmdSignOut.ServerClick
FormsAuthentication.SignOut()
Response.Redirect("logon.aspx", True)
End Sub
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
yepyeni bir kimlik kadınca Donanım Haberleri 0 08-07-2008 12:51
Kullanıcı Hesabı Denetimi nedir? kadınca Program kullanımı & tanıtım 0 18-12-2007 02:20
Kimlik Celebrian Felsefe 0 20-11-2007 06:06
Kimlik Celebrian Felsefe 0 20-11-2007 03:01
Öyküsel Kimlik Celebrian Felsefe 0 20-11-2007 02:50


Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone