Çok Faktörlü Kimlik Doğrulama & Merkezi Kimlik Yönetimi Örnek Proje

Çok Faktörlü Kimlik Doğrulama & Merkezi Kimlik Yönetimi Örnek Proje

Çok Faktörlü Kimlik Doğrulama & Merkezi Kimlik Yönetimi Örnek Proje


1. PROJE HAKKINDA GENEL BİLGİLENDİRME

Okulda bir proje ödevi olarak hazırlamam gereken bu projeyi burada paylaşarak, ihtiyacı olanların veya incelemek isteyen arkadaşların erişimine sunuyorum. Projenin kaynak dosyalarına bu link üzerinden ulaşabilirsiniz.

Proje üç ana bölümden oluşmaktadır. Öncelikle bu üç bölüm şu şekilde tanımlanabilir.

1-      Görev Yönetim Sistemi: Görev yönetim sistemi bir işletme için personel görevlendirmesi, iş takibi ve proje yönetimi gibi işlemlerin gerçekleştirildiği hayal edilerek tercih edilmiş olan, personellerin sıklıkla kullandığı bir sistemdir.

2-      Muhasebe Yönetim Sistemi: Muhasebe yönetim sistemi de görev yönetim sisteminde olduğu gibi bir işletmenin olmazsa olmazı olan bir sistemdir. Bu sebeple ikinci hayali sistem olarak tercih edilmiştir. Muhasebe yönetim sistemi muhasebe personellerinden ziyade diğer personeller de avans talepleri, harcırah bilgileri, maaş ve diğer maddi işlemler için kullanılmaktadır.

3-      Kullanıcı Yönetim Sistemi: Kullanıcı yönetim sistemi hazırlanan projenin konu ile alakalı kısmını oluşturmaktadır. Bu sistem üzerinde çok faktörlü doğrulama yöntemi kullanılarak ek güvenlik yöntemleri ile daha güvenli bir ortamda sisteme kayıt işlemleri, oturum kontrol işlemleri, şifre yenileme işlemleri ve hesap doğrulama işlemleri yapılmaktadır.

Muhasebe ve görev yönetim sistemlerini tam anlamıyla çalışıp görevlendirme işlemleri, cari ve muhasebe işlemleri yapmamaktadır. Konu ile alakası olmadığı için çalışır hale getirilmemiştir. Sadece ana sayfa kısmı ve oturum kapatma kısmı aktif hale getirilerek kullanıcının sistemlere giriş yaptığının veya yapmadığının kontrol edilmesi hedeflenmiştir.

2. PROJENİN HAZIRLANDIĞI ORTAM, DİL VE VERİ TABANI

·         Proje Visual Studio 2019 üzerinde hazırlanmıştır.

·         Proje ASP.NET – MVC ile EntityFramework kullanılarak hazırlanmıştır.

·         Proje için MSSQL veri tabanı tercih edilmiştir.

3. PROJENİN HAZIRLANMA AŞAMALARI

3.1 Planlama Aşaması

Proje hazırlanmaya başlanmadan önce, öncelikle neler yapılacağına karar verildi. Nasıl bi sistem olması gerektiği, konuya uygun ne gibi bir sistem olması gerektiği düşünüldü. İş akışı şu şekilde gerçekleşti.

1-      Konu çok faktörlü kimlik doğrulama ve merkezi kimlik yönetimi olduğu için öncelikle birden çok bağımsız fakat ilişkili sistem olması gerektiği düşünüldü.

2-      Bu bağımsız fakat ilişkili sistemler ayrı ayrı oturum bilgisi tutmayacağı, tek bir merkez üzerinden kullanıcı doğrulaması ve oturum kontrolü yapılması gerektiği düşünüldü.

3-      Düşünülen sistem için minimum iki adet kullanıcıların aktif olarak kullanacağı sistem, bir tane de bu sistemlerin kullanıcı işlemlerini ve oturum kontrol işlemlerini sağlayacak kullanıcı yönetim sistemi yapılması gerektiği düşünüldü.

4-      Projenin tasarlanması için hangi ortamda yapılacağı, hangi dil ve veri tabanı tercih edileceğine karar verilmesi gerektiği için ilgili konular belirlenmeye başlandı.

5-      Hazırlanacak proje için günümüz şartlarında bir çözüm sunması gerektiği düşünüldü. Masaüstü sistemler günümüzde değerini kaybetmiş durumda ve her platformdan erişilebilir değil. Mobil uygulamalar ise günümüz şartlarına uygun sistemler olmasına rağmen, web tabanlı sistemler kadar aktif olarak tercih edilmemektedir. Bu sebeple web tabanlı sistemler yapılması gerektiği düşünüldü.

6-      Web tabanlı yapılacak olan bu sistemler, tercihen ASP.NET üzerinde MVC mimarisi kullanılarak yapılmasına karar verildi.

7-      Hazırlanacak sistemler için veri tabanı olarak MSSQL kullanılmasına karar verildi.

8-      Projenin tasarlanması için gereken bilgilere karar verildi ve sonraki aşama olarak projenin tasarlanmasına başlanıldı.

3.2. Tasarlama Aşaması

Projenin tasarlanma aşaması için, öncelikle projenin kağıt üzerinde planlaması yapılmalıdır.  Projenin tasarlanmasında sırayla yapılacak olanlar şu şekilde belirlenmiştir.

1-      Kullanılacak kimlik doğrulama yöntemlerinin belirlenmesi.

2-      Kullanılacak modellerin tasarlanması.

3-      Tasarlanan modellere göre sistemin yapması gereken işlevlerin tasarlanması.

4-      Yapması gereken işlevler için gerekli olan sayfaların tasarlanması.

5-      Tasarlanan işlevler ve sayfalar için uygun sınıf ve fonksiyonların belirlenmesi.

6-      Son olarak ise kağıt üzerinde hazırlanan sistemin gerçekleştirilmesi.

Tasarlama aşamaları, ihtiyaçlar ve gereksinimler belirlendi ve projenin tasarlanmasına başlanıldı.

3.2.1. Kullanılacak kimlik doğrulama yöntemlerinin belirlenmesi.

Hazırlanacak sistemler için kullanılacak kimlik doğrulama yöntemleri projenin şekil almasında önemli bir rol oynamaktadır. Oturum kontrolünün sağlanacağı yöntem, oturum açma ve şifre değiştirme sırasında kullanılacak güvenlik yöntemleri proje üzerinde kritik ve önemli bir rol oynamaktadır. Bu denli önemli olan bir sistem için yapılan bir araştırma sonrasında tercih edilecek yöntemler şu şekildedir.

1-      Oturum verilerinin kontrolü ve saklanması için kullanılacak yöntem

System.Web.Security altında bulunan FormsAuthentication sınıfıdır. Bu yöntem oturum verilerini istemci üzerinde çerezler olarak saklayarak sadece ilgili cihaz üzerinden erişime izin vermektedir. Bir oturum başlatmak için GetAuthCookie fonksiyonu ile yeni bir çerez oluşturuluyor. Daha sonra bir adet FormsAuthenticationTicket oluşturarak çerezin geçerlilik süresi ve taşınacak veri ekleniyor. Oluşturulan bu bilet Encrypt fonksiyonu aracılığı ile şifrelenerek bir string haline getiriliyor. Bu string hale gelen bilet oluşturulan çereze eklenerek ilgili http response’a iliştirilerek gitmesi gereken alt sisteme yönlendirilecektir.   

2-      Sisteme giriş yapmak için kullanılacak doğrulama yöntemleri

Kullanıcının sisteme giriş yaparken kullanacağı iki adet kimlik belirleme yöntemi kullanılacaktır. Bu yöntemlerden birincisi kullanıcı şifresi olacaktır. Kullanıcı sisteme giriş yapmak istediği takdirde kullanıcı adı ve şifresini girecektir. Eğer ki doğru verileri girmiş ise, o zaman sisteme kayıtlı e-mail adresine bir doğrulama kodu gönderilecek ve gelen kodu girmesi istenecektir. Bu sayede 2FA(çift faktörlü kimlik doğrulama ) kimlik doğrulama işlemi gerçekleştirilmiş olacaktır.

3-      Şifre yenileme işlemi için kullanılacak doğrulama yöntemleri

Kullanıcının sisteme erişimi kaybettiği zaman mevcut şifresini değiştirmek istemesi durumunda şifre yenileme talebinde bulunması gerekmektedir. Bu durumda öncelikle kayıtlı kullanıcı adı veya e-mail adresini girerek doğrulama amacıyla kayıtlı e-mail adresine gönderilen şifre yenileme bağlantısını açması gerekmektedir. Daha sonra ikinci aşama olarak eğer ki geçerli bir link ile gelmiş ise, sisteme kaydolurken oluşturmuş olduğu güvenlik sorusunun cevabını doğru olarak vermesi gerekecektir. Doğru cevap vermesi halinde yeni bir şifre oluşturabilecektir.

4-      Sisteme kayıt olurken kullanılacak doğrulama yöntemleri

Sisteme kayıt aşamasında kullanılacak bir adet doğrulama yöntemi bulunmaktadır. Bu doğrulama yöntemi kullanıcı gerekli tüm verilerini girip onaylandıktan sonra e-mail adresine gönderilecek olan bir hesap onaylama linki olacaktır. Bu link aracılığı ile kullanıcı hesabını doğrulayabilecektir. Bu şekilde rastgele e-mail adresi ile sisteme kayıt yaptırmanın önüne geçilmiş olunacaktır.

3.2.2. Kullanılacak Modellerin Tasarlanması

Proje üzerinde kullanılacak model projenin en önemli kısmını oluşturmaktadır. Çünkü sistemler bu model üzerinde dönecektir. Bu sebeple hazırlanacak model bir hayli önem arz etmektedir.

Hazırlanacak model için sorulacak sorular ve gereksinimler şu şekilde oluşturulacaktır.

1-      Sistemler üzerinde bir kayıt işlemi gerçekleşecek mi?

Bu soru üzerinden yola çıkarak sistem üzerinde gerçekleşecek kayıt işlemleri göz önüne getirildiğinde bariz olarak oturum açan kullanıcıların kaydının tutulması gerektiği görülmektedir. Bunun haricinde bir log kaydı tutularak hangi kullanıcıların işlem yaptığı kayıt altına alınabilir.

2-      Herhangi bir yetkilendirme işlemi gerçekleştirilecek mi?

Şu an üzerinde çalışılan konuya bakıldığı zaman görülebiliyor ki kullanıcı yönetim sistemi haricindeki sistemler faal olarak hizmet vermeyeceğinden ve sadece oturum kontrolü sağlanacağından ötürü herhangi bir yetkilendirme işlemine gerek duyulmayacaktır.

3-      Hazırlanan modeller üzerinde herhangi bir ilişkilendirme yapılacak mı?

Hazırlanacak olan log kaydı tutacak model ile kullanıcı bilgilerinin tutulduğu model arasında bir ilişkilendirme olacak. Bu ilişkilendirme ile log kaydına oturum açan kullanıcının kaydı iliştirilecek.

4-      Hazırlanacak üç ayrı sistem için birden çok veri tabanı mı olacak, yoksa tek bir veri tabanı üzerinde mi çalışacak?

Hazırlanacak sistemler şu an büyük bir proje olmadığından ötürü tek bir veri tabanı üzerinde çalışacak. Eğer daha büyük bir sistem yazılıyor olsa idi bir web servis aracılığı ile sadece gerekli olan verilerin talep edileceği, daha genişletilmiş bir sistem kullanılabilirdi.

Sorulacak ve cevaplanacak temel konular düşünülüp cevaplar verildikten sonra modeller şu ana kadar planlanan ve düşünülen akışa göre oluşturulmaya başlanabilir.

İlk olarak sistemlerin bel kemiği olacak olan kullanıcı modelini oluşturmamız gerekmektedir. Bu model için kullanılacak değişkenler şu şekilde olacaktır.

1-      kullaniciId (PK,AI,int) : Her kullanıcı için otomatik artan sayı olarak oluşturulacak olan benzersiz kullanıcı kimlik numarası.

2-      adSoyad (string) : Kullanıcının ad soyad bilgilerini tutacak olan değişken.

3-      sifre (string) : Kullanıcının şifre bilgilerini tutacak olan değişken.

4-      kullaniciAdi (string) : Kullanıcının sisteme giriş yaparken kullanabileceği kullanıcı adını tutacak olan değişken.

5-      email (string) : Kullanıcının oturum açarken kullanabileceği, şifre yenileme işlemi ve doğrulama kodlarının gönderileceği e-mail adresini tutacak olan değişken.

6-      soru (string) : Kullanıcının şifresini unuttuğu takdirde yeni bir şifre oluşturması için kullanılacak olan güvenlik sorusunu tutacak olan değişken.

7-      cevap (string) : Oluşturulacak olan güvenlik sorusunun cevabını tutacak olan değişken. Kullanıcı eğer bu değişkende yazılı olan doğru cevabı girerse, şifre doğrulama işlemi sonraki adıma ilerleyecektir.

8-      dogrulamaKodu (string) : MFA için gönderilecek doğrulama kodlarının kaydını tutacak olan değişken.

9-      hesapDurumu (bool) : Sisteme kaydolan kullanıcının e-mail hesabını doğrulamadan önce pasif olan hesabını aktifleştirip aktifleştirmediğinin kontrolünün yapılacağı değişken.

Kullanıcı modeli tanımlandıktan sonra kullanılacak diğer model olan log modeli şu şekilde tanımlanacak.

1-      ipLoginId (PK,AI,int) : Log kayıtlarının her biri için oluşturulacak benzersiz, otomatik artan sayı tipinde numaraları tutacak değişken.

2-      zaman (DateTime) : Sisteme giriş zamanının tutulduğu değişken.

3-      ipAdresi (string) : Kullanıcının oturum açarken kullandığı cihaza ait ip adresinin kaydının tutulduğu değişken.

4-      dogrulama (string) : Kullanıcının oturum kontrolü yapılırken diğer sistemlere gizli olarak gönderilecek oturum kontrol doğrulama kodunu tutacak değişken.

5-      kullanici (kullanici) : Kullanıcı modelinden türetilmiş olan kullanici tipinde, oturum açan kullanıcının bilgilerini tutacak olan değişken.

Toplamda iki adet olması planlanan modeller yukarıda tanımlandığı şekilde oluşturulmuştur. Oluşturulan bu modeller ile birlikte sonraki aşama olan sistemin yerine getirmesi gereken işlevlerin belirlenmesine geçilecektir.

3.2.3. Tasarlanan Modellere Göre Sistemin Yapması Gereken İşlevlerin Tasarlanması

Sistemler için gerekli olan modeller tanımlandıktan sonra artık çalışacak sistemlerin tasarlanması gerekmektedir. Bu sistemler için öncelikle ne işlevleri yerine getirmesi gerektiğine karar verilmelidir. Sistemlerin yerine getirmesi gereken işlevler aşağıda belirtildiği gibi olacaktır.

1-      Kullanıcı yönetim sistemi

Kullanıcı yönetim sistemi projenin en önemli sistemi olarak çalışacaktır. Bu sebeple en yoğun ve en işlevsel sistem bu olacaktır. Bu sistemin genel olarak yerine getireceği işlevler oturum kontrolüne yönelik işlevler olacaktır. Bunun haricinde şifre yenileme, kayıt ve hesap doğrulama işlemlerini de yapacaktır. Bu işlemler için gerekli tanımlamalar ve kullanılacak yöntemler aşağıda tanımlanacaktır.

a.       Yeni kullanıcı kaydı

Sistemin ilk adımı olarak her sistemde olduğu gibi yeni bir kullanıcı oluşturulması gerekmektedir. Yeni bir kullanıcı oluşturulurken de oluşturulan modele istinaden bir kayıt formu oluşturulmalı. Bu form üzerinde ad soyad, e-mail ve kullanıcı adı ilk adımda alınması gereken bilgiler olacaktır. Çünkü alınan kullanıcı adı ve e-mail adreslerinin sistem üzerinden kontrol edilerek mevcut herhangi bir kayıtla eşleşmediğinin doğrulanması gerekmektedir. Doğrulama işlemi tamamlandıktan sonra ikinci aşamaya geçerek güvenlik sorusu, soru cevabı ve kullanıcı şifresinin talep edilmesiyle beraber form gönderildikten sonra kayıt işleminin tamamlanması için kullanıcının girmiş olduğu e-mail adresine bir doğrulama linki gönderilmesi gerekmektedir. Gönderilen link vasıtası ile kullanıcı hesabını doğrulayarak kayıt işlemini tamamlamış olacaktır.

Bu senaryoya göre oluşturulması gereken fonksiyonlar şu şekilde sıralanabilir.

i.                     JsonResult girisBilgileriKontrol( string e-mail, string kullaniciAdi, string adSoyad )

Bu fonksiyon ile kayıt formundan ilk adımda girilen bilgilerin sistemde bir kullanıcıya işaret edip etmediğinin, boş olup olmadığının kontrolü yapılacaktır. Doğru olması halinde sonraki aşamaya, hatalı olması durumunda hata durumuna göre json paketi halinde bir hata kodu döndürmesi hedeflenmektedir.

ii.                   string MailGonder(string email, string konu, string mesaj)

Bu fonksiyon ile kullanıcı ile iletişime geçerek gerekli e-mail gönderme işlemleri gerçekleştirilecektir. Kullanıcı kaydı işlemleri için hesap doğrulama linkinin gönderilmesi işlemini gerçekleştirirken, giriş yapma ve şifre yenileme kısımlarında da kullanılacaktır.

iii.                 ActionResult dogrula(int kullaniciId, string dogrulamaKodu)

Bu fonksiyon vasıtası ile kayıt olan kullanıcıların hesap doğrulama işlemleri gerçekleştirilecektir. Kayıtlı e-mail adresine gönderilen link ile doğru verilere sahip olduğu takdirde hesabının doğrulama işlemi gerçekleştirilerek giriş sayfasına yönlendirilecektir. Aksi takdirde bir hata mesajı üreterek hatalı veya süresi geçmiş bir linke sahip olduğu belirtilecektir.

b.       Sisteme giriş

Doğrulama gerektiren sistemlerde olmazsa olmaz olan sisteme giriş sayfası üzerinden adından da anlaşılacağı üzere hazırlanan sistemlerde oturum açma işlemi gerçekleştirilecektir. Bu işlemin senaryosu şu şekilde belirtilebilir.

Öncelikle sisteme kaydolmuş ve hesap onayını gerçekleştirmiş olan kullanıcı, sistemde oturum açmak için kullanıcı adı veya e-mail adresi ve şifresini form üzerinden girerek giriş yapmak için doğrulamanın yapılacağı fonksiyona iletiyor. Fonksiyon tarafından okunan kullanıcı adı ve şifre doğru olduğu takdirde kayıtlı e-mail adresine bir doğrulama kodu gönderiliyor. Kullanıcı adı veya şifresi yanlış olduğu takdirde ise bir hata mesajı üretilerek kullanıcıya bilgi veriliyor.

Kullanıcı doğrulandıktan ve kayıtlı e-mail adresine doğrulama kodu gönderildikten sonra sisteme giriş sayfası ikinci aşamaya geçerek e-mail adresine gönderilen doğrulama kodunu isteyecektir. Girilen  kod ilgili fonksiyon tarafından kontrol edilerek doğru iste sisteme yönlendirecek, hatalı iste bir hata mesajı üreterek kullanıcıya hata bildirimi yapacaktır.

Bu senaryoya göre oluşturulması gereken fonksiyonlar şu şekilde sıralanabilir.

i.                     JsonResult girisKontrol(string kullaniciAdi, string sifre, string dogrulamaKodu, string durum)

Bu fonksiyon üzerinden sisteme giriş yapma ile alakalı tüm işlemler gerçekleştirilecektir. Fonksiyon üzerinde parametre ile alınan değişkenlerden durum değişkeni, “birinci” ve “ikinci” şeklinde iki değer alacaktır. Gelen değer “birinci” olduğu takdirde kullanıcı adı ve şifre kontrolü yapacak, doğru ise kayıtlı e-mail adresine sistem tarafından üretilecek karmaşık bir doğrulama kodu gönderecek ve aynı zamanda bu kodu bir session içerisinde kullanıcıdan alacağı değerle karşılaştırmak için tutacak. Buraya kadar bir hata oluşmamışsa eğer giriş işleminin ikinci aşamasına geçmek için onay, hatalı bir durum oluşmuş ise hata mesajı döndürecek. Eğer ki durum değişkeni “ikinci” değerini almış ise o zaman giriş işleminin ikinci aşaması çalışmış demektir. Bu durumda sistem kullanıcı tarafından girilen doğrulama kodunu session içerisinde tuttuğu doğrulama kodu ile karşılaştırarak doğru olduğu takdirde kullanıcıyı sisteme yönlendirecektir. Eğer ki hatalı ise kullanıcıya bir hata mesajı döndürecektir.

ii.                   rastgeleKod()

Bu fonksiyon ile sistem üzerinde tahmin edilmesi güç rastgele kodlar üretilecek. Üretilecek kodlar 6 karakterden oluşacak ve klavyede bulunan 32 harf ve 10 rakamdan rastgele seçerek oluşturulacak. Yani toplamda 746 farklı şifre oluşturulmuş olacaktır.

c.       Şifre yenileme

Şifre yenileme işlemi, sisteme üye olan kullanıcıların giriş yapmak için kullandıkları doğrulama yöntemlerinden birisi olan şifrelerini sıfırlamak için kullanacağı bir işlemdir. Bu işlemin senaryosu şu şekilde belirtilebilir.

Sisteme üye olmuş ve hesabını onaylatmış bir kullanıcı, eğer ki şifresini unutmuş ise şifre yenileme sayfası üzerinden şifre sıfırlama yapabilir. Şifre sıfırlamak için kullanıcı adını veya e-mail adresini giren kullanıcının bilgileri ilgili fonksiyon tarafından kontrol edilerek, eğer ki öyle bir kullanıcı var ise kullanıcının güvenlik sorusunu ekrana göndererek kullanıcıdan bu güvenlik sorusunun cevabı beklenmektedir. Kullanıcı tarafından gönderilen cevap doğru olduğu takdirde yeni şifre oluşturması talep edilecektir ve şifre sıfırlama işlemi tamamlanmış olacaktır.

2-      Görev yönetim sistemi ve muhasebe yönetim sistemi

a-       Sistemden çıkış

Sistemden çıkış yapma işlemi, oturum açmış olan personelin oturumunu sonlandırmak için kullanılacak olan işlemdir.

b-      Oturum kontrolü

Oturum kontrol işlemi, kullanıcı yönetim sistemi tarafından oturum açmış olan kullanıcıların oturum verilerini okuyarak mevcut sistemde de oturum verilerini sürdürmeyi hedeflemektedir.

3.2.4. Yapması gereken işlevler için gerekli olan sayfaların tasarlanması.

Hazırlanacak projede yukarıda tanımlanan işlevlerin bazılarının görsel bir arayüze ihtiyaç duymamasına rağmen, bazıları bir form üzerinden kullanıcı ile iletişime geçmektedir. Bu sebepten ötürü yukarıda tanımlanan işlevlerden gerekli olanları aşağıda tanımlayacağım.

1-      Kullanıcı Yönetim Sistemi

a-       Login

Bu sayfa üzerinden kullanıcıların sisteme giriş yapması, hedeflenmektedir. Yukarıda belirtilen senaryo üzerinden kullanıcının doğrulanıp sisteme erişiminin sağlanması bu sayfa üzerinden gerçekleştirilecektir.

b-      Kaydol

Kaydol sayfası üzerinden sisteme yeni kullanıcılar dahil edilecektir. İki aşamalı olarak çalışacak olan kaydol sayfasında ilk aşamada sadece ad soyad, kullanıcı adı ve e-mail adresi alınarak, sistemde kayıtlı olan farklı bir kullanıcıya işaret edip etmediği kontrol edilecektir. İkinci aşamada ise kayıt için herhangi bir engel teşkil etmeyen kullanıcı bilgilerine ek olarak güvenlik sorusu ile cevabı ve kullanıcı şifresi girilerek kayıt işlemi tamamlanacaktır.

c-       Şifre Yenile

Şifre yenileme sayası üzerinden sisteme üye olmuş ve şifresini kaybetmiş kullanıcılar için şifresini değiştirme imkanı sunulmaktadır. İki ayrı sayfa olarak çalışacak olan şifre yenileme işlemi için ilk aşamada sisteme kayıtlı olan kullanıcı adı veya e-mail adresi girilerek mevcut bir kullanıcı olup olmadığı kontrol edilir. Eğer ki uygun bir kullanıcı var ise sisteme kayıtlı e-mail adresine bir şifre yenileme bağlantısı gönderilir.

d-      Şifre Değiştir

Şifre değiştirme sayfası kullanıcının e-mail adresine gönderilen şifre yenileme bağlantısının yönlendirileceği sayfadır. Bu sayfa üzerinde kullanıcının yapacağı iki işlem vardır. Öncelikle hesabına daha önce kaydetmiş olduğu güvenlik sorusunun doğru cevabını vermek. Doğru cevabı verdiği takdirde ikinci aşamaya geçerek kullanıcının yeni şifresini girmesi talep edilecektir. Kullanıcı yeni şifresini girdikten sonra işlem tamamlanarak sisteme giriş yapmak üzere giriş yap sayfasına yönlendirilir.

e-      Doğrula

Doğrula sayfası görsel bir ara yüze sahip olmamakla birlikte sisteme yeni kaydolmuş kullanıcıların hesaplarının doğrulamasının yapıldığı sayfadır. Kullanıcı bu sayfa üzerinden doğrulama işlemi yapılarak giriş yap sayfasına yönlendirilir.

f-        Yönlendir

Yönlendir sayfası da bir görsel ara yüzü bulunmayan bir sayfadır. Bu sayfanın vazifesi, giriş yap sayfası üzerinden oturum açan kullanıcının gitmesi gereken alt sisteme yönlendirmesini gerçekleştirmektir. Giriş yap sayfası üzerinden gelen bilgiler doğrultusunda yönlendirme işlemini gerçekleştirerek doğrudan ilgili alt sistemin ana sayfasına yönlendirme yapmaktadır.

2-      Muhasebe ve Görev Yönetim Sistemi

a-       Ana sayfa

Ana sayfa adından da anlaşılacağı üzere muhasebe ve görev yönetim sistemlerinin açılış sayfası olacaktır. Kullanıcı oturum açmamış ise kayıt ve oturum açma sayfalarına yönlendirmek için butonlar bulunacak.  Eğer oturum açılmış ise,  oturum açıldığını belirtmek için ekran üzerinde “Hoş geldin { Kullanıcı ad soyad }.” Şeklinde bir karşılama mesajı verilecektir ve aynı zamanda hemen alt tarafta sistemden çıkış yapmak için kullanılacak olan çıkış yap butonu bulunacaktır.

b-      Çıkış Yap

Çıkış yap sayfası üzerinden kullanıcılar mevcut oturumlarını sonlandıracaklardır. Bu sayede sistemdeki diğer alt sistemlerden de çıkış yapmış olacaklardır. Ve daha sonra tekrar giriş yapmak üzere giriş yap sayfasına yönlendirileceklerdir.

3.2.5. Tasarlanan işlevler ve sayfalar için uygun sınıf ve fonksiyonların belirlenmesi.

Hazırlanacak sistemlerde kullanılacak ve tekrar eden birçok işlem için tekrar tekrar aynı kodun yazılmasının önüne geçmek için tekrar eden içerikleri bir fonksiyon içerisine, eğer daha karmaşık bir sistemse bir sınıf altında toplanmış fonksiyonlar ile yapılacak işlemler kontrol altına alınarak daha düzenli bir sistem elde edilmiş olacaktır. Bu sebeple tekrar eden veya sistemin geliştirildiği düşünüldüğünde tekrar etmesi olası olan işlemler kontrol altına alınmıştır. Tekrar etmesi olası olan işlemler için fonksiyon haline getirilen komutlar aşağıda verilmiştir.

1-      Kullanıcı Yönetim Sistemi

a-       public string MailGonder( string EMail, string Konu, string Mesaj )

Bu fonksiyon ile SMTPClient sınıfını kullanarak bir e-mail oluşturarak istenilen herhangi bir e-mail adresine e-mail gönderilebilir. İşlem sonucu string bir değişken olarak döndürülecek ve e-mail gönderilip gönderilmediği öğrenilmiş olacak.

b-      public string ipAl()

Bu fonksiyon vasıtası ile sistemde oturum açacak olan kullanıcıların ip adresleri alınacak. Bu işlem için gelen http isteği içerisinde bulunan kullanıcının ip adresi alınacaktır. Ekstra doğruluk için yönlendirme yapılan ip adresleri üzerinde de kontrol yapılarak son ip adresine ulaşılmış olacaktır.

c-       public string rastgeleKod()

Bu fonksiyon 6 karakterden oluşan rastgele doğrulama kodları oluşturmaktadır. Oluşturulan kodlar klavyede bulunan 32 küçük, 32 büyük harf ve 10 adet sayı karakteri arasından rastgele olarak seçilecektir. Rastgele olarak seçilen bu kodlar toplamda 74 karakter arasından seçileceğinden dolayı 746 farklı kombinasyon oluşturulmuş olacaktır.

2-      Muhasebe ve Görev Yönetim Sistemi

a-       public bool login()

Bu fonksiyon kullanıcıların oturum kontrolünü yapacak olan ana fonksiyon olacaktır. Sistem her sayfa yenilediği zaman çalışarak oturum kontrolünü ve süresini sağlamış olacaktır. Oturum sonlandığı zaman “false” değerini, oturum devam ettiği takdirde “true” değerini döndürecektir. Oturum sonlandığı takdirde giriş yapma sayfasına yönlendirilecektir.

3.2.6. Kağıt üzerinde hazırlanan sistemin gerçekleştirilmesi.

Planlanması ve tasarlanması tamamlanan sistemin gerçekleştirilmesi işlemine başlanacaktır. Hazır olan iş akışı, fonksiyonlar ve modellerden yola çıkarak nasıl bir sistem gerçekleştirileceği açık ve net olduğu için hızlı bir süreçte sistem gerçekleştirilecektir ve proje tamamlanacaktır.