Yazılım mühendisliğinde “güvenlik” birbirinden çok farklı ve geniş anlamlar ifade eden bir kavramdır. Fakat güvenliği ASP.NET özelinde ele alırsak, güvenliğin erişim kontrolü temelinde yapılandırıldığını görürüz. Bu yapı, kimlik belirleme (Authentication) ve yetkilendirme (Autharization) temelinde yönetilir.
Kimlik Belirleme(Authentication) Metodları
Kullanıcı kimlik biligisini belirlemek te kullanılan yöntemler aşağıdaki gibidir;
- Forms (Cookie) Authentication
- Windows Authentication
- Basic
- Digest
- Integrated (NTLM, Kerberos)
- Passport Authentication
ASP .NET ‘te bu metotlardan herhangi birisinin uygulanabilmesi için web.config dosyasının authentication elementinin mode özelliğinde seçilir.
<authentication mode="Windows | Forms | Passport | None" />
1.Forms Authentication
Uygulamamızda tüm kullanıcıların erişebilecekleri giriş formu sayesinde kullanıcı bilgilerini toplayıp bu bilgileri veritabanı, XML, web.config yada Active Directory"deki kullanıcı bilgileri ile karşılaştırarak kullanıcı kimlik belirlemesi ve yetkilendirmesinin yapıldığı yöntemdir. Burada kullanıcı bilgileri cookie ler de saklanır,opsiyonel olarak kullanıcıdan her seferinde tekrar tekrar aynı bilgileri istememek adına, bu bilgiler belirli bir süre için kullanıcının makinesindeki özel bir cookie içerisinde tutulur, şayet kullanıcı bu süre içerisinde aynı uygulamaya tekrar girmek isterse, credential’lar bu cookie içerisinden otomatik olarak okunarak ve kullanıcının haberi olmadan kimlik belirlemesi gerçekleştirilebilir.
Web.Config
<authentication mode="Forms">
<forms name="Univera" loginUrl="Interface/KullaniciGirisi/LoginMain.aspx" protection="All" timeout="19" path="/">
<credentials passwordFormat="Clear">
<user name="huseyin" password="hsyn44" />
<user name="cam" password="cam44" />
</credentials>
</forms>
</authentication>
<forms name="Univera" loginUrl="Interface/KullaniciGirisi/LoginMain.aspx" protection="All" timeout="19" path="/">
<credentials passwordFormat="Clear">
<user name="huseyin" password="hsyn44" />
<user name="cam" password="cam44" />
</credentials>
</forms>
</authentication>
- name : Cookie’nin ismi;kullanıcı@localhost isminde bir cookie oluşuyor.
- loginUrl : Login sayfasının URL yolu.
- protection : Koruma yöntemi.
- Encryption: Cookie şifrelenir.
- Validation: Cookie içeriğinin değişip değişmediğine bakılır.
- All: Encryption + Validation
- None: 2 si de yapılmaz.
- timeout : Dakika cinsinden sona erme süresi. Default 20.
- path : Konum. Varsayılan /.
- credentials : Kullanıcı bilgilerini içerir.
- passwordFormat : Şifrelerin nasıl saklanacağı.
- Clear: Şifresiz saklama. Tavsiye edilmiyor.
- MD5: Şifreli
- SHA1: Şifreli
Yukarıdaki web.config örneğinde kullanıcı bilgilerini web.config te credentials elementinde tanımlanmıştır. Ama biz uygulamamızda veri tabanında saklayıp.Kimlik doğrulama kısmında FormsAuthentication sınıfını kullanmayıp kendimiz kontrol edip kullanıcı kimliğinin doğru olduğunu koddan kendimizin verdiği örnek aşağıdaki gibidir.
If isKullaniciOk Then
FormsAuthentication.SetAuthCookie(txtKullanici.Text, False)
RedirectToMainMenu()
End If
FormsAuthentication.SetAuthCookie(txtKullanici.Text, False)
RedirectToMainMenu()
End If
FormsAuthentication Sınıfı
- Authenticate(ByVal userName As String, ByVal password As String) Parametrelerine girilen kullanıcı adı ve şifrenin, web.config dosyasında tanımlı olan şifreler ile eşleşip eşleşmediğini gösteren Boolean bir değer döndürür.
- RedirectFromLoginPage(ByVal userName As String, ByVal createPersistentCookie As Boolean) Kimliği doğrulanmış bir kullanıcıyı cookie de saklayıp, talep ettiği sayfaya yönlendirir. İlk parametresi kullanıcı ismidir. 2. parametresi ise, güvenlik bilgilerinin kalıcı bir cookie içerisinde saklanıp saklanmayacağını belirtir. True geçilirse; söz konusu bilgiler kalıcı bir cookie içerisinde saklanır, ve cookie silinene ya da expire olana kadar aynı bilgilerin tekrar girilmesi önlenmiş olur. False geçilirse bu bilgiler aslında geçici bir cookie içerisinde saklanır.
- SetAuthCookie(ByVal userName As String, ByVal createPersistentCookie As Boolean) RedirectFromLoginPage() metodu ile aynı görevi yapar ama otomatik olarak yönlendirme yapmaz.
- Signout() Metodu : İstemcideki cookie’yi siler.
Authorization
Web.config te location elementi ile formlara veya dizinlere erişim yetkileri yönetilir.allow veya deny elementleri ilede yasaklayacağı veya izin vereceği kullanıcı/kullanıcı türü erişim değerleri atanır.
Kullanıcı Gelen İfadeleri;
- * (Tüm Kullanıcılar)
- ? (Authenticate olmamış olan kullanıcılar)
<location path="Interface">
<system.web>
<authorization>
<deny users="?" />
<allow users="nuri" />
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<deny users="?" />
<allow users="nuri" />
</authorization>
</system.web>
</location>
<location path="Interface/Common/WebMessageBox.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
2.Windows Authentication
Windows erişim modelinde kullanıcı kontrolü Login formda değil IIS uygulaması seviyesinde yapılır. Bunun için web.config ve IIS seviyesinde Authentication parametrelerin değerlerini aşağıdaki gibi düzenlemek gerekli. Aşağıdaki IIS Authentication ayarları Windows-Basic Authentication doğrulamasi için yapılmıştır.
<authentication mode="WindowsForms"/>
<identity impersonate="true" />
<identity impersonate="true" />
Impersonation
Sisteme giriş yapan kullanıcının bir başkasıymış gibi yetkilendirilmesi fonksiyonuna impersonation denir. Bu elementi web.config te true yaptığımızda ASP.NET Worker Process login olan windows kullanıcı bilgisi ve haklarıyla işlem yapar. Atanmadığında varsayılan değeri false tur.
Sisteme giriş yapan kullanıcının bir başkasıymış gibi yetkilendirilmesi fonksiyonuna impersonation denir. Bu elementi web.config te true yaptığımızda ASP.NET Worker Process login olan windows kullanıcı bilgisi ve haklarıyla işlem yapar. Atanmadığında varsayılan değeri false tur.
Authentication Yöntemleri
Basic Authentication
En basit yöntemdir.Hemen hemen her tarayıcı bu yöntemi destekler. Kullanıcı kontrolünü standart windows logon ekranı ile yapar.
En basit yöntemdir.Hemen hemen her tarayıcı bu yöntemi destekler. Kullanıcı kontrolünü standart windows logon ekranı ile yapar.
Digest Authentication
Internet Explorer 5.0 ve üstü ile çalışır. Kullanıcı adı ve şifresi networkte taşınmaz, onun yerine bir hash transfer edilir. Dolayısıyla network alan adı altındaki tüm kullanıcı şifreleri geri çevrilebilir bir algoritma ile Active Directory de saklanır.
Internet Explorer 5.0 ve üstü ile çalışır. Kullanıcı adı ve şifresi networkte taşınmaz, onun yerine bir hash transfer edilir. Dolayısıyla network alan adı altındaki tüm kullanıcı şifreleri geri çevrilebilir bir algoritma ile Active Directory de saklanır.
Windows Authentication
Bu yöntemde, öncelikle makinada oturumu açmış kullanıcı ile giriş yapılır o kullanıcının hakkı yok ise windows logon ekranı ile başka kullanıcı ile login olması istenir.
Bu yöntemde, öncelikle makinada oturumu açmış kullanıcı ile giriş yapılır o kullanıcının hakkı yok ise windows logon ekranı ile başka kullanıcı ile login olması istenir.
3. Passport Authentication
Birçok site için kullanıcı adı ve parolalarının senkronize edildiği Microsoft tarafından barındırılan ve merkezi olarak yönetilen bir servistir. Bu servisi Microsoft"tan satın aldıktan sonra Passport SDK"yı yükleyerek Passport authentication"ı kullanılabilir. Passport etkin bir sitede imzalandığında, kullanıcının bu tip uygulamaların hepsi için kimlik denetimi yapılmış olur.
Hüseyin ÇAM
Merhabalar ilk olarak çalışmalarınızda başarılar dilerim, benim bir problemim var elimde .net teknolojisiyle oluşturulmuş bir adet website mevcut fakat localhostta yayınladığımda Authentication.aspx isimli bir sayfa açılıyor ve bu sayfadada kullanıcı adı ve şifrenin bulunduğu bir ekran var buraya web.config dosyasının içindeki user ve pasword bilgilerini girdiğim zaman hatayla karşılaşıyorum YANLIŞ ŞİFRE VE KULLANICI ADI gibi.. Ne yapmam gerekli? eğer dosyayı göremeden bir şey söyleyemem derseniz sizin için de bir problem teşkil etmezse msn üzerinden yardımlarınızı talep edeceğim doganmermer@msn.com bu konuda beni bilgilendirir ve sorunumu çözmeme yardımcı olursanız sevinirim.. Doğan MERMER
YanıtlaSil