Full Version : Autentifikacija u ASP.NET-u 1
gordan54 >>C, C++, C#, C.NET >>Autentifikacija u ASP.NET-u 1


<< Prev | Next >>

maksvel- 11-04-2006
Konačno sam odlučio da rešenja raznoraznih pitanja, na koja naiđem "u letu" io zapišem, odnosno postavim neke karakteristične stvari u jedan doc, pa da se nađe...

Kada se govori o pojmovima autentifikacija i autorizacija, ponekad je nejasno šta je šta... Autentifikacija je proces određivanja da li neki korisnik može ili ne može pristupiti određenom sistemu. Autorizacija sledi autentifikaciju i određuje čemu je moguće pristupiti.

Autentifikacija putem formi (forms based) podrazumeva postojanje login forme čiji „prelazak“ je uslov za posećivanje zaštićenih strana sajta. U slučaju da registrovani korisnik unese adresu zaštićene strane, a da se prethodno nije prijavio (ulogovao), aplikacija ga preusmerava na stranu za prijavu. Po uspešnoj prijavi, korisnik se automatski usmerava na stranu koju je prvobitno zahtevao.

Ovde treba još razgraničiti nivoe autentifikacije. Naime, za korišćenje aplikacije, potrebno je „preći“:
• Autentifikaciju na nivou fajl sistema. U slučaju da je reč o NTFS- u (preporučljivo), treba procesu koji obrađuje ASP.NET zahteve (tzv. worker proces) dodeliti prava nad folderom/fajlom. U slučaju XP-a, worker proces radi pod nalogom ASPNET, a kod Win2003 pod „Network Service“.
• Autentifikaciju IIS-a. Ovde u igri mogu biti prosta aut. (pop-up sa zahtevom za ime/lozinku), složenija digest (slično kao prosta aut.) ili Windows integrated. Poslednja je zadovoljavajuća i treba je zadržati. Podrazumeva pristup IIS-u sa pravima trenutno ulogovanog korisnika.
• Autentifikacija aplikacije. Ovde se ponbovo može koristiti Windows integrisana aut, što je najjednostavnije rešenje za lokalne mreže, a znači da korisnici pristupaju preko sa dozvolama koje odgovoaraju njihovim nalozima pod kojima su trenutno ulogovani na svojim računarima. Forms autentifikacija je praksa za Internet.

Takođe, treba pomenuti i poseban sistemski nalog, tzv. Internet user. Faktički udaljeni korisnik pristupa računaru-serveru pod ovim, anonimnim nalogom. Konkretan naziv naloga je IUSR_{ime računara servera}. Anonimni Internet nalog može da se ostavi omogućenim, a da se ovakvi, anonimni - znači neulogovani korisnici na nivou aplikacije ograničavaju. Upravo je to poenta Forms autentifikacije 

Osnovni web.config fajl treba da sadrži informaciju-direktivu o tipu autentifikacije. Inicijalno, ovde stoji Windows. Primer taga za autentifikaciju:
CODE

<authentication mode="Forms" >
       <forms loginUrl="~/Login.aspx"></forms>
</authentication>


Ovde se kao strana za prijavu postavlja Login.aspx. (Tilda (~) znači relativno adresiranje → konkretno ova strana se nalazi na rutu sajta.)

Na strani Login.aspx obično se nalaze dva tekstualna polja - za korisničko ime i lozinku, kao i dugme za potvrdu prijave. Ovo dugme je povezano sa hendlerom za prijavu, npr:
CODE

protected void btnLogIN_Click(object sender, EventArgs e)
   {
       string korIme = txtBoxKorIme.Text;
       string lozinka = txtBoxLozinka.Text;
       if (validateUser(korIme, lozinka))
       {
           FormsAuthentication.RedirectFromLoginPage(korIme, false);
       }
       else
       {
           Label error = new Label();
           error.Text = "Pogrešni podaci";
           error.ForeColor = System.Drawing.Color.Red;
           Page.Controls.AddAt(0, error);
       }


Kao parametar funkcije RedirectFromLoginPage postavlja se korisničko ime i ono se čuva u kolačiću. (Naziv kolačića se podrazumeva, ali se može i zadati eksplicitno, pri zadavanju parametara autentifikacije.)

Posebna funkcija - validateUser, zadužena je za proveru regularnosti korisnika: dali uopšte postoji, da li postoji vrednost poljalozinke i da li se lozinka slaže sa unetom. Npr.
CODE

private bool validateUser(string id, string unhashedPwd)
   {
        bool result = false;
        string connString = WebConfigurationManager.ConnectionStrings["konekcija"].ConnectionString;
       SqlConnection conn = new SqlConnection(connString);
       conn.Open();
 SqlCommand cm = new SqlCommand("SELECT lozinka FROM Korisnici WHERE    korIme='"+ id + "'", conn);
       SqlDataReader dr = cm.ExecuteReader();
       if (!dr.Read())
           result = false; // not found
       else
       {
           if (dr.IsDBNull(0))
               result = false;
           else
           {
               result = (String.Equals(unhashedPwd, dr.GetString(0)));
           }


maksvel- 11-04-2006
Par dodatnih informacija :-)
Ovde je dat primer sa SQL bazom, naravno, prostor imena System.Data.Oledb omogućava rad sa npr. Access bazom, a postoji i native podrška za Oracle... Za ostale baze koriste se ili ODBC ili third party drajveri...
Takođe, ovde je lozinka heširana (nekim algoritmom - npr MD5), a zatim sačuvana u bazi.
Sledeći put, još ponešto...

Free Forum Hosting by Forumer.comTM!