Citat:
Acid:
Hvala mmix, bas to mi je trebalo, ali...
1. Kako da kreiram stranice kojima moze da pristupi svako?
2. Mozes li MOLIM TE da uradis copy/paste ove 4. tacke, jer moj MSDN ne moze da pronadje stranicu koju si naveo.
Mozes li da mi malo pojasnis kako ovo sve radi?
1. Stavi ih sve u jedan pod-folder, npr. /public i tamo napravi web.config sledeće sadržine (tj. dozvoli pristup bez autorizacije svim korisnicima, uključujući neautentifikovane):
Code:
<configuration>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
2. E, izvini, link je bio nekompletan, moniker nije help:// nego ms-help://, ne znam kako mi se izgubilo to ms- pri copy/paste linka :(. Elem, pun link je
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpref/html/frlrfsystemwebsecurityformsauthenticationticketclasstopic.htm
Tip za ove MSDN linkove ;) ako imate MSDN instaliran, ovaj moniker je uredno registrovan na sistemu i jednostavno možete da pastujete ovaj link u address line IE-a i dobićete topic iz MSDNa na koji pokazuje. Možda bi admin ovog foruma mogao da prizna taj moniker kao validan (pored http-a) :) onda ne bi moralo ni copy/paste
Ok, šalu na stranu, evo koda, lako je provaliti kako da se ubaci u login stranu koju praviš:
Code:
private bool Authenticated(string email, string password)
{
// This method authenticates the user for the application.
// In this demonstration application it always returns true.
return true;
}
private void Login_Click(Object sender, EventArgs e)
{
// Create a custom FormsAuthenticationTicket containing
// application specific data for the user.
string email = UserEmail.Text;
string password = UserPass.Text;
bool isPersistent = false;
if (Authenticated(email,password)) {
// ovde proveriš koje su mu role i to staviš u userData...
string userData = "Users;Admins";
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
email,
System.DateTime.Now,
System.DateTime.Now.AddMinutes(30),
isPersistent,
userData,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
// Redirect back to original URL.
Response.Redirect(FormsAuthentication.GetRedirectUrl(email,isPersistent));
}
}
Pogledaj topic za konstruktor FormsAuthenticationTicket objekta za detalje oko toga šta ovi parametri znače i kako možeš da ih prilagodiš... Ovde se naravno loguje sa emailom i passwordom, ti samo prilagodi da bude username i password. Promenio sam samo da iPersistent bude hardcoded na false, gledaj da ne praviš persistent security cookies, to bi na javnim compovima kompromitovalo sigurnost.
Nadam se da ovo pomaže...
Pozdrav.
PS. Dodato kasnije :)
Zaboravih zadnje pitanje, kako funkcioniše.
1. Elem, kad stigne zahtev za aspx stranicu od klijenta taj zahtev presreće ASP.NET ISAPI.
2. On uzima metod authentikacije koji je u rootu aplikacije (u ovom slučaju FormsAuthentication) i instancira odgovarajući Authentication modul.
3. Taj modul dobija šansu da authentikuje korisnika (ono što smo mi uradili u prethodnoj poruci je da smo promenili default ponašanje eventa onAuthenticate a koje se svodi na ovo naše samo bez kreiranje liste uloga), nakon čega se dobija security principal (znači da je korisnik authentikovan) ili je User = null, što naravno znači da korisnik NIJE authentikovan.
4. Onda ISAPI gleda rekurzivno unazad po folderima SVE web.config fajlove i njihove authorization liste, dok ne nađe role ili user koji se podudara (ovde vodi računa o * i ?, tj o SVIM korisnicima i NEAUTENTIFIKOVANIM korisnicima (onima za koje je onAuthenticate vratio User = null)). Ako je korisnik neautentifikovan a autorization ne dozvoljava pristup istima, u slučaju Forms authentikacije poziva se aspx strana koja je definisana (ovde /public/login.aspx) u nadi da će ista proizvesti ticket koji će korisnik čuvati u vidu kriptovanog cookie-a (kako ne bi mogao da se napravi fake cookie i kompromituje sistem).
5. Kad login strana izgeneriše i da korisniku cookie, u gornjem primeru radi redirekciju na stranu koja je inicijalno zatražena
6. Stiže ponovni zahtev za stranicom od korisnika, ovaj put sa security cookiem, onAuthenticate dekriptuje cookie i generiše security principal, vidi tačku 2, čime je korisnik authentifikovan i može da prođe proveru iz tačke 3.
Ima tu još sitnica, ali to ti je to generalno. Nadam se da je jasno.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić