HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Web Service elérése csak felhasználói azonosítás után


Példaprogram letöltése

17149 bájt

Web Service-ek elérésénél is adott a lehetőség, hogy a szolgáltatásainkat csak bejelentkezés után tegyük elérhetővé. Ebben a cikkben azzal foglalkozunk, hogy miként tehetjük védetté a Web Service szolgáltatásainkat azonosítatlan felhasználók elől, valamint hogyan oldhatjuk meg a felhasználói azonosítást.
Készítünk egy kliens alkalmazást is, melyen keresztül megpróbálhatjuk elérni a Web Service-t bejelentkezés nélkül és bejelentkezés után is.

Mellékelt példa kipróbálásához szükséges egy LoginService nevű virtuális könyvtár létrehozása, mely arra a könyvtárra mutat, amelybe másolta a példát. Ehhez legegyszerűbb út az adott mappa tulajdonság ablakában lévő Webmegosztás lapon található, ahol engedélyezzük a megosztást.
Kezdjük a Web Service készítésével.
LoginService alkalmazás
Ahhoz, hogy szolgáltatásunkat korlátozni tudjuk az azonosítatlan felhasználók előtt, ahhoz a web.config állományban kell néhány bejegyzést elhelyeznünk, méghozzá az authorization bejegyzésnél:
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
A deny users sorban a kérdőjel arra utal, hogy minden azonosítatlan felhasználó számára a hozzáférés meg van tagadva.
Az allow users sorban lévő csillag arra utal, hogy minden azonosított (bejelentkezett) felhasználó számára a hozzáférés engedélyezett.
Nézzük miként lehet bejelentkezni:
Ehhez a Login nevű függvényünk fog segíteni. Itt a username és password paraméterben kell megkapnunk a szükséges azonosítókat a felhasználóról. Ezt a függvényen belül különböző módszerekkel eldönthetjük, hogy elfogadjuk-e vagy sem. Az egyszerűség kedvéért most fixen beépítettünk egy felhasználói nevet és jelszót, melyet elfogadunk.
    [WebMethod]
    public bool Login(string username, string password)
    {
      if (username=="software" && password=="online")
      {
Ha érvényes felhasználói nevet és jelszót kaptunk, akkor a FormsAuthentication osztály SetAuthCookie függvényének hívásával jelezzük ezt a tényt egy Cookie létrehozásával és visszaadásával.
        FormsAuthentication.SetAuthCookie(username, true);
        return true;
      }
      else
Ellenkező esetben nem teszünk semmit az ügyben, hogy a felhasználónk azonosított legyen, így továbbra sem fog hozzáférni a Web Service-ünk funkcióihoz.
      {
        return false;
      }      
    }
Hozzunk létre egy Logout nevű függvényt is, melyet meghívva a bejelentkezett felhasználó kijelentkezhet.
    [WebMethod()] 
    public void Logout()
    {
Ez esetben, ha már megtörtént a bejelentkezése, akkor meghívhatjuk a SignOut függvényt, mely elvégzi a felhasználó kijelentkeztetését.
      if (Context.User.Identity.IsAuthenticated)
      {
        FormsAuthentication.SignOut();
      }
    }
Végül készítsünk egy olyan funkciót, mely a Web Service tényleges szolgáltatása. Ez ismét csak az egyszerűség kedvéért annyit tesz, hogy a paraméterként kapott szám kétszeresét adja vissza sztringként.
    [WebMethod()]
    public string OtherFunction(int a)
    {
A funkciót csak akkor hajthatjuk végre, ha a felhasználó már érvényesen bejelentkezett.
      if (Context.User.Identity.IsAuthenticated == true)
      {
        return (a*2).ToString();
      }
Ha a felhasználó nincs azonosítva, akkor nem végezzük el a kettővel való szorzást, így aztán soha nem tudja meg szegény az eredményt, amíg hitelesen be nem tud jelentkezni.
      else
      {
        return "Ez a funkció csak bejelentkezés után érhető el!";
      }
    }
TestApp alkalmazás
A teszt alkalmazás, melyből meghívjuk a Web Service függvényeit egy hagyományos Windows alkalmazás lesz. Ahhoz, hogy egyszerűen elérhessük a Web Service-t, készítsük el a proxy osztályt a WSDL.EXE segédprogrammal.
Wsdl http://localhost/LoginService/Service1.asmx?WSDL
A létrejött Service1.cs forráskódot adjuk hozzá a teszt alkalmazás projektéhez.
Ezt követően létrehozunk egy példányt a Service1 osztályból, majd már hívhatjuk is a Login függvényét a bejelentkezéshez.
  Service1 s = new Service1();
  s.Login(textBox1.Text, textBox2.Text)
Ha jó a felhasználói név és jelszó, akkor a bejelentkezés megtörténik és ez esetben az OtherFunction hívása is eredményes lesz és nem hibaüzenettel végződik.
    private void button3_Click(object sender, System.EventArgs e)
    {
      label3.Text = s.OtherFunction(Convert.ToInt32(textBox3.Text));
    }
Szükségünk lesz még egy lépésre a helyes működés érdekében: amikor a Login lefut és sikeresen bejelentkezünk, akkor egy cookie-t kapunk vissza. Ha ezt nem tároljuk és a következő kéréskor nem továbbítjuk, akkor a Web Service nem fog „emlékezni” ránk, így nem sikerül elérni a kívánt funkciót sem. Ahhoz, hogy ezzel ne legyen gondunk nem kell mást tennünk, mint létrehoznunk egy CookieContainer osztályt, mely képes a cookie-k tárolására és felhasználására. A létrehozott osztályt a Service1 osztály CookieContainer nevű property-jében kell hozzárendelnünk a Web Service osztályunkhoz. A létrehozás után már minden megy automatikusan, több gondunk nincs a bejelentkezés megoldásával.
      s.CookieContainer = new CookieContainer(); 
Próbáljuk meg úgy is elérni az OtherFunction függvényt, hogy nem vagyunk bejelentkezve.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 416. 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 |