![]() |
|
| |||||||
|
| WebMasTer SiTeSi |
| | Seçenekler |
|
#1
| |||
| | |||
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 |
![]() |
| Arama Etiketleri: denetimi, form, kimlik, tabanli |
| 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 |
![]() |