HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Felhasználókhoz rendelt hozzáférési jogok használata, automatikus bejelentkezés


Felhasználói azonosítás 4. rész

Példaprogram letöltése

17141 bájt

Amikor egy felhasználót sikeresen azonosítunk, az még nem jelenti azt, hogy minden esetben biztosítani is szeretnénk részére az összes web oldalunk elérési lehetőségét. Ilyen jellegű feladatok megvalósításánál a felhasználóinkhoz különféle jogokat szoktunk rendelni. Ekkor bejelentkezés után bizonyos oldalakat csak bizonyos joggal rendelkező felhasználók érhetnek el, míg a többi oldalt bármely azonosított felhasználónk megnézheti.
Sorozatunk mostani részében azt vizsgáljuk, hogy az APS.NET-es alkalmazások miként segítenek bennünket az ilyen jellegű feladatok megvalósításában, valamint azt is megnézzük, hogy miként tudjuk biztosítani azt a felhasználóink számára, hogy ha egyszer már érvényesen bejelentkeztek, akkor a legközelebbi látogatásukkor ezt ne kelljen megismételniük, hanem automatikusan történjen meg a bejelentkeztetés.

A mellékelt példa használatához a UserAuth.sql-t futtassa le az SQL szerverén annak érdekében, hogy a program által használandó UserAuth04 adatbázis létrejöjjön a megfelelő tartalommal együtt.
További előkészületi lépés, hogy a Global.asax.cs forráskód 27. sorában a connStr változó értékét adja meg úgy, hogy a létrehozott UserAuth04 adatbázis elérhető legyen.
A példa megnyitása előtt hozzon létre webmegosztást UserAuth04 névvel azon a könyvtáron, ahová a mellékelt példát helyezte.
A mellékelt példa a következőképpen működik:
Az első web oldal, ami elérhető az a Default.aspx. Mivel ennél beállítottuk, hogy csak bejelentkezés után látható, így a program indulásakor rögtön a Login.aspx oldalra kerülünk, melyen megadható a felhasználói név és jelszó. A létrehozott adatbázisban három felhasználó szerepel, ezek közül az egyik kapott administrator jogot, a másik kettő csak user jogot kapott. Bejelentkezés után visszakerülünk a Default.aspx oldalra itt van egy link, mely a Secret.aspx lapra mutat, de ezt csak akkor érhetjük el, ha administrator joggal rendelkező felhasználóként jelentkeztünk be. Ha ezt így tettük meg, akkor a linkre kattintva megjelenik a Secret.aspx tartalma, ha másik felhasználót választottunk, akkor ismét a Login.aspx lapon találjuk magunkat, ahol megadhatunk egy másik felhasználói nevet és jelszót, mivel user joggal rendelkező felhasználóként nem tudjuk a Secret.aspx lapot elérni. Ebben az esetben, ha megadunk egy administrator joggal rendelkező felhasználót, akkor automatikusan a kért Secret.aspx oldalra kerülünk.
Nézzük, miként is érhető el mindez.
Ehhez ismernünk kell a létrehozott adattáblánk szerkezetét is: itt három oszlop van, melyben a felhasználói nevet, jelszót és a felhasználóhoz tartozó jogot tároljuk el szövegesen megadva, mely lehet administrator, vagy user.
Hogyan tudjuk elérni azt, hogy csak bejelentkezett felhasználó és ezen belül is csak administrator joggal rendelkező személy tudja elérni a Secret.aspx web oldalt? Erre a választ a Secret könyvtárban lévő web.config állomány adja meg. Itt az authorization szekcióban megadunk egy allow kulcsot, melyben a roles értékénél az administrator szót használjuk. Ezzel a Secret könyvtárban lévő összes aspx lapot csak administrator joggal rendelkező felhasználó érheti el.
    <authorization>
        <allow roles="administrator" />
        <deny users="*" />
        <deny users="?" />        
    </authorization>
A bejelentkezés
Nézzük meg most miként jelentkeztetünk be egy-egy felhasználót. Ehhez a Login.aspx oldalt fogjuk használni. Itt adható meg a felhasználói név és jelszó. Megadás után ellenőriznünk kell, hogy az adatbázis táblájában van-e ilyen név és jelszó. Ehhez létrehoztunk egy UserAuthenticate nevű függvényt, melynek paraméterként a megadott felhasználói nevét és jelszavát kell megadni és visszatérési értékként igazat ad, ha a felhasználói név és jelszó létezik az adattáblában.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      if (UserAuthenticate(TextBox1.Text, TextBox2.Text))
      {
Amennyiben a felhasználó helyesen adta meg adatait, a bejelentkezése érvényes. Ekkor rendelkezünk arról, hogy legközelebbi látogatásakor ne kelljen ismét megadnia adatait. Ehhez egy cookie-t használunk fel. Ilyen lehetőséget persze csak akkor használjunk éles helyzetben, ha nem okoz rendszerünkben problémát az, hogy esetleg valaki más ül le a felhasználónk gépe elé és ő látogat el web oldalunkra. Mivel a cookie-val nem a személyt azonosítjuk, hanem azt a számítógépet ahonnan bejelentkezett, így ha azt a gépet más is használja, akkor több személy is elérheti lapjainkat bejelentkezés nélkül.
Cookie létrehozásához a SetAuthCookie függvényt használjuk, majd a Response osztály Cookies tömbjéből előkeresve a létrehozott cookie-t, módosítjuk annak lejárati dátumát úgy, hogy az aktuális naphoz képest két héttel később járjon le. Ennek következtében a bejelentkezett felhasználónknak két hétig nem kell megadnia felhasználói nevét, jelszavát.
        FormsAuthentication.SetAuthCookie(TextBox1.Text, true);
        HttpCookie cookie = Response.Cookies[FormsAuthentication.FormsCookieName];
        cookie.Expires = DateTime.Now.AddDays(14);
        FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, true);      
      }
      else
      {
Sikertelen bejelentkezés esetén megjelenítünk egy hibaüzenetet.
        Label3.Visible=true;
      }
    }
A UserAuthenticate függvényünk létrehoz egy SQL kapcsolatot a táblánkkal, majd ott futtat egy select-et, melynek az a lényege, hogy ha találunk olyan sort a táblában, melynél megegyezik a felhasználó név és jelszó a megadottal, akkor a bejelentkezést eredményesnek nyilvánítjuk.
    private bool UserAuthenticate(string username, string password)
    {
      ...
      SqlCommand command = new SqlCommand("select count(*) from users where (UserName='"+username+"') and (Password='"+password+"')",  connection);
      int count=(int)command.ExecuteScalar();
      return count>0;
    }
A felhasználói jog
Most már csak az a kérdés, hogy miként tudathatjuk a rendszerrel, hogy egy-egy felhasználónk milyen joggal rendelkezik.
Ehhez térjünk át a Global.asax.cs forráskódhoz. Itt találunk egy eseménykezelőt, mely az Application osztály AuthenticateRequest eseményéhez van rendelve. Ez az esemény minden webes kérésnél lefut. Itt a következőket tesszük: ellenőrizzük, hogy a kérésnél a felhasználó vajon azonosított-e már. Ezt a Request osztály IsAuthenticated property-jének vizsgálatával tehetjük meg. Ha már azonosított felhasználó küldi a kérést a rendszerünk felé, akkor a felhasználóhoz hozzá kell rendelnünk, hogy milyen joggal rendelkezik. Ehhez kell egy lekérdezést futtatnunk az adattáblában, hogy megtudjuk azt az információt, hogy az adott felhasználóhoz milyen jog tartozik.
    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
      HttpApplication ha = (HttpApplication) sender;
      if (ha.Request.IsAuthenticated) 
      {
Első lépésként meghatározzuk a felhasználói nevet.
        FormsIdentity fi = (FormsIdentity)ha.User.Identity;
Ha a név adott, akkor meghívjuk a UserRole függvényünket, mely képes arra, hogy felhasználói név alapján előkeresi a felhasználóhoz tartozó jogot és ezt sztringként visszaadja.
        string role = UserRole(fi.Name);
Ha adott a felhasználói jog, akkor egy új felhasználó azonosító objektumot hozunk létre, melyben már megadjuk a felhasználó adatai mellé a hozzá tartozó jogot is.
        ha.Context.User = new GenericPrincipal(fi, new string[]{role});
      }
    }
Ez a procedúra azért nem helyezhető el a Login.aspx lapon a bejelentkezésnél, mert ott csak akkor fut a program, amikor a bejelentkezés ténylegesen megtörténik. Viszont ha a felhasználó már azonosított, de különféle kéréseket küld webes rendszerünk felé, akkor már nem is kerül a vezérlés a Login.aspx oldalára, így a jog hozzárendelését a felhasználóhoz máshol kell megoldanunk és célszerűen erre egy olyan globális megoldást kell választani, amely bármely aspx laptól független, vagyis marad a Global.asax.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 390. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |