Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

User LogIn na vise stranica

[es] :: .NET :: User LogIn na vise stranica

[ Pregleda: 3167 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Acid
Nikola Milanovic
Cacak

Član broj: 9585
Poruke: 144
*.yubc.net.



Profil

icon User LogIn na vise stranica12.01.2004. u 21:07 - pre 246 meseci
Pozdrav svima.

Problem je sledeci: Na login.aspx strani imam dva textbox-a i jedno dugme. kada korisnik klikne na dugme konekujem se na bazu i proveravam da li postoji ime i lozinka. E sad kad proverim sve to problem je sledeci:

- kako da informaciju da je korisnik ulogovan prosledjujem na druge stranice? Samim tim bih mogao da napravim da kada korisnik u browseru ukuca admin.aspx bez klika na link browser mu ne pokaze stranu. HVALA

p.s. razmisljao sam da to uradim preko baze u koju bih upisivao DA ili NE, pa na pokretanju stranice ako je NE browser ne pokaze stranu.
 
Odgovor na temu

veljaradenkovic
Velja Radenkovic
Beograd

Član broj: 2977
Poruke: 281
*.ptt.yu

ICQ: 147120023


Profil

icon Re: User LogIn na vise stranica12.01.2004. u 21:21 - pre 246 meseci
Mozda ovo moze:

Imas ovaj panel(asp.net server control) i on ima svojstvo Visible.

Recimo na praznu stranu dodas tri panela(zvacemo ih panel1, panel2 i panel3).

U prvi panel stavis Login formu.

U drugi sadrzaj stranice koju prikazujes ako je logovanje uspelo.

U treci sadrzaj stranice ako logovanje nije uspelo (invalid username or(and) password).

U dogadjaj Form_load:

Stavis ovako:

Code:
Panel1.Visible=true;
Panel2.Visible=false;
Panel3.Visible=false


Ovo ima za rezultat da se servira samo strana sa Login formom:

Onda na submit forme proveris korisnicko ime i pwd pa:
Code:

  Ako je korisnik autorizovan onda 
     panel2.Visible=true;
     panel3.Visible=false;
     panel1.Visible=false;
  Ako nije
    panel2.Visible=false;
    panel3.Visible=true;
    panel1.Visible=false;


Probaj pa javi.

Vodi racuna o PostBack!
 
Odgovor na temu

Acid
Nikola Milanovic
Cacak

Član broj: 9585
Poruke: 144
*.teleportgroup.net



Profil

icon Re: User LogIn na vise stranica12.01.2004. u 22:02 - pre 246 meseci
Nebi moglo tako jer ja imam MNOGO stranica koje zavise od tog login-a.
Da li neko moze onako usput da mi jasnije objasni IsPostBack.
HVALA.
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
195.252.81.*



+3 Profil

icon Re: User LogIn na vise stranica12.01.2004. u 22:24 - pre 246 meseci
Evo ovako, kad proveris u bazi imas li korisnika, gurni tu info u session:

Code:
Session["PustamGa"] = true;



u page_load svake sledece strane proveris ovako na primer:

Code:

try
{
   // ako je neko napamet gadjao stranu ovde ce da se 
   // digne conversion exception
   // posto ce promenjiva PustamGa biti null
   bool auth = Convert.ToBoolean("PustamGa");
    if (auth == true)
   {
      ... prikazujes panele samo za autorizovanog korisnika
   }
   else
   {
      ... logovanje neuspesno, dajes mu poruku ili ga 
          redirektujes na login
   }
}
catch (Exception ex)
{
   ... poruka da nesto nije u redu sa logovanjem i 
       redirekcija na login stranu
}
finally
{
  ... zatvori konekciju ka bazi, i odradi ostale akcije 
      koje se desavaju bez obzira da li je uspesno ili 
      neuspesno logovanje (ako ih ima)
}


Napisao sam ti malopre detaljniji primer, sada sam zbrzao posto je u medjuvremenu prsao ES sa konekcijom na mysql.. pa me je mrzelo ponovo korak po korak. Pitaj ako ti jos nesto fali.

U slucaju da imas stvarno jako puno strana u kojima bi trebao da postoji ovaj isti kod, valjalo bi razmisliti o nekom controller paternu.

[Ovu poruku je menjao spartak dana 13.01.2004. u 00:39 GMT]
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
195.252.81.*



+3 Profil

icon Re: User LogIn na vise stranica12.01.2004. u 22:35 - pre 246 meseci
Citat:
Acid:
Da li neko moze onako usput da mi jasnije objasni IsPostBack.


Jesi li procitao nesto o tome u dokumentaciji? Ajde potrudi se malo, to je jedna od osnovnih stvari a bonus za zapitkivanje koristi za nesto komplikovanije.

Probaj msdn:
http://msdn.microsoft.com/libr...UIPageClassIsPostBackTopic.asp
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: User LogIn na vise stranica13.01.2004. u 14:28 - pre 246 meseci
Ljudi, mnogo ste ovo iskomplikovali koristeći tehnologiju ASP-a (ne ASP.NET).

ASP.NET ima mnogo fine security metode, a po onom što sam video u pitanju, treba vam:

* ASP.NET Forms authentication
* ASP.NET Role based authorization (ovde ima malo posla, zbog gluposti MSa)

Za detalje oba pogledajte MSDN, čisto ću da opišem scenario koji bi ovde radio, pre ovog pročitajte o gornjim pojmovim da bi bilo jasnije:

1. Koristeći web.config u root-u namesti se Forms Authentication, postavite authentication link na recimo "public/Login.aspx":
Code:
<authentication mode="Forms">
    <forms name=".AUTHCOOKIE" loginUrl="/public/login.aspx" />
</authentication>

Ovo će sprečiti SVE koji nisu prošli kroz login.aspx i dobili validan ticket da pridju bilo kojoj aspx stranici sajta čiji authorization je non-anonymous.

2. Koristeći web.config u root-u odredite sledeći Authorization:
Code:
<authorization>
    <deny users="?" />
</authorization>

Ovo govori asp.net security-u da su sve aspx stranice zaključane za anonymous korisnike što će izazvati poziv authorization form-a

3. Sve admin strane stavite u recimo /admin i u tom folderu napravite slave web.config file sa sledećim sadržajem:
Code:
<configuration>
    <system.web>
        <authorization>
            <allow roles="Admins"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</configuration>

Ovo kaže da je stranama u admin folderu zabranjem pristup svim korisnicima (uključujući i ulogovane) koji nemaju ulogu (role) "Admins"


4. U login.aspx, uzmete user/pass, proverite user/pass i izdate ticket da bi se zadovoljili zahtevi autorizacije iz tačke 2. Takođe se proveri kategorija korisnika i ako je admin, ubaci mu se role "Admins" da bi se zadovoljili zahtevi autorizacije iz tačke 3.

Treba nam par linija koda u login.aspx strani, pogledajte kreiranje ticketa u MSDNu da ne bih radio copy/paste bezveze
(help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1033/cpref/html/frlrfsystemwebsecurityformsauthenticationticketclasstopic.htm)

Korišćenje uloga, van Windows Authentication šeme, zahteva mali iskorak. Znači u ovom kodu iz MSDNa, kao sadržaj userData stavite uloge razdvojene sa ;, npr. ako ste upitom u bazu odredili da je korisnik admin onda (pre kreiranja ticket objekta):

Code:
userData = "Users;Admins";


Pošto asp.net nema default handler za forms roles, mora da se doda sledeći kod u global.asax.cs:

Code:

using System.Web.Security;
using System.Security.Principal;

protected void FormsAuthentication_OnAuthenticate( Object sender, System.Web.Security.FormsAuthenticationEventArgs e)
{
    if (e.Context.Request.Cookies[".AUTHCOOKIE"] != null) {
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt (e.Context.Request.Cookies[".AUTHCOOKIE"].Value);
        string[] roles = ticket.UserData.Split(';');
        e.User = new GenericPrincipal(new GenericIdentity(ticket.Name, "FormsAuthentication"), roles);
    }
}


Ovaj kod jednostavno iščupa uloge korisnika iz kriptovanog cookia, od tog stringa sa ulogama naravi array gde je svaki element jedan role (koristeći split sa ; ) i kreira security element (principal) koji će ASP.NET security koristiti da proveri autorizaciju.

Ostalo se vrlo lako konfiguriše i održava, lako se proširuje i ne moraju da se pišu kobasice i includovi na svakoj strani da bi se sprečilo ručno pozivanje skrivenih stranica. Možda vam deluje komplikovano zbog dužine ove poruke :), ali verujte nije, probajte. Ja znam da se na staro više ne vraćam :)

Pozdrav.
PS. Ako negde zagusti, reply.

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ć
 
Odgovor na temu

Acid
Nikola Milanovic
Cacak

Član broj: 9585
Poruke: 144
*.teleportgroup.net



Profil

icon Re: User LogIn na vise stranica13.01.2004. u 19:09 - pre 246 meseci
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?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: User LogIn na vise stranica13.01.2004. u 21:12 - pre 246 meseci
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ć
 
Odgovor na temu

Acid
Nikola Milanovic
Cacak

Član broj: 9585
Poruke: 144
*.teleportgroup.net



Profil

icon Re: User LogIn na vise stranica14.01.2004. u 11:41 - pre 246 meseci
Hvala, sad mislim da razumem kako sve to radi.
Medjutim, problemima nikad kraja:

-Kada napravim ticket i pozovem stranicu iz Admin foldera, dobijam sledecu gresku:
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
-Pri tome je selektovana linija koda u Web.Config (onaj u Admin folderu): <authentication mode="Forms">

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: User LogIn na vise stranica14.01.2004. u 13:40 - pre 246 meseci
Citat:
Acid:
Hvala, sad mislim da razumem kako sve to radi.
Medjutim, problemima nikad kraja:
-Kada napravim ticket i pozovem stranicu iz Admin foldera, dobijam sledecu gresku:
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
-Pri tome je selektovana linija koda u Web.Config (onaj u Admin folderu): <authentication mode="Forms">


Ok, ovo je već configuration problem, nema veze sa asp.net security. Root tvoje aplikacije nije ujedno i root IIS aplikacije, što mora da se podudara.

1. Idi u IIS Manager, lociraj root tvoje aplikacije, i uđi u properties.
2. Nađi "home directory" ili "directory" tab
3. U sekciji Application settings, klikni dugme Create
4. Daj ime aplikaciji (nevažno), execute permission stavi na Scripts
5. U zavisnosti od OSa i IISa koji imaš:
• na IIS5 odredi nivo izolacije (stavi neki, da se ne upuštam u to šta koji znači)
• na IIS6 odredi kom application pool-u pripada aplikacija (ako ne znaš šta radiš ostavi "DefaultAppPool")

I trebalo bi da radi...

pozdrav
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ć
 
Odgovor na temu

[es] :: .NET :: User LogIn na vise stranica

[ Pregleda: 3167 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.