HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Üzenetek aláírása


Példaprogram letöltése

16736 bájt

A Microsoft WSE (Web Services Enhancements for Microsoft .NET) csomagjának segítségével hangsúlyt fektethetünk a Web szervizek elérésének biztonsági kérdéseire is. Azon túl, hogy megoldhatjuk üzeneteink titkosítását, lehetőségünk van arra, hogy aláírjuk a küldött információt. Ehhez a WSE speciális módszereket kínál, melyek egy részével cikkünkben most megismerkedhetünk. Elkészítünk egy példát, melyben a szerviz alkalmazás mintegy hitelesíti a felhasználói kérést.

Mellékelt példa megnyitása előtt szükséges egy WSEServer nevű virtuális könyvtár létrehozása, mely a példa mappájában található WSEServer alkönyvtárra mutat. Ehhez nyissa meg a mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A szerviz alkalmazás futtatása előtt gondoskodnunk kell arról, hogy a Web szerver virtuális mappájában engedélyezzük a névtelen hozzáférést.
A mellékelt példa használatához telepítenünk kell a Microsoft WSE 1.0 csomagot. Ennek elvégzéséhez olvassa el a Kezdeti lépések című fejezetet.
Kezdeti lépések
A Microsoft által elkészített csomag a Web Services Enhancements for Microsoft .NET nevet viseli, és cikkünk írásakor a következő Webcímen volt elérhető, mely természetesen megváltozhatott: http://msdn.microsoft.com/webservices/building/wse/default.aspx.
Letöltve az állományt (Web Services Enhancements 1.0 for Microsoft .NET.msi) telepítenünk kell a .NET Framework alá. Az öntelepítő állomány erről gondoskodik, a használható .DLL állomány (Microsoft.Web.Services.dll), és a kapcsolódó dokumentáció alapértelmezésben a következő mappába kerül: %winroot%:\Program Files\Microsoft WSE\v1.0.2312\.
A telepített assembly bekerül a globális assembly-listába, így amikor referenciaként megadjuk alkalmazásainkban, akkor a globális palettáról kell kiválasztanunk, nem pedig valamilyen alternatív mappából.
Web szerviz megvalósítása
A szerviz alkalmazás egy nyilvános metódussal rendelkezik, mely nem tesz mást, mint ellenőrzi, hogy a felhasználótól a várt hitelesítési információkat adta meg, vagy nem. A neve ControlUser, mely a kliensből paraméterek átadása nélkül hívható.
A WSE csomag névtereinek eléréséhez referenciaként mind a kliens, mind a szerver-alkalmazásokban meg kell adni a Microsoft.Web.Services.dll állományt. Ehhez válasszuk a Project - Add reference menüpontot, majd a megjelenő ablakban a .NET lapon keressük elő a Microsoft.Web.Services.dll elemet.
A szükséges osztályok eléréséhez meg kell adnunk a következő hivatkozásokat:
using System.Security.Permissions;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Security.Cryptography;
using Microsoft.Web.Services;
using Microsoft.Web.Services.Security;
A szerviz alkalmazás a fenti metódusban feldolgozza a kliens által küldött SOAP üzenetet, mely tartalmazza a hitelesítési információkat. Ehhez szüksége van a kérés adatfolyamára, mely a következőképpen nyerhető ki:
SoapContext cont = HttpSoapContext.RequestContext;
A szerviz a klienstől egy felhasználónév-jelszó párt kap, mely egy UsernameToken objektum formájában tárolódik. A szerviz ellenőrzi a felhasználónevet, valamint a jelszót. Az ellenőrzés után küld egy üzenetet a klienshez az eredményről.
A felhasználónév ellenőrzéséhez meghív egy IsValidUser nevű metódust, mely paraméterként a küldött adatfolyamot kapja meg, majd ezt feldolgozva ad vissza TRUE, vagy FALSE értéket attól függően, hogy a felhasználónév megfelelő vagy sem. A küldött üzenet aláírást is tartalmaz, mely a kliens-alkalmazásban a Signature osztály segítségével volt létrehozva, és a felhasználói TOKEN aláírására szolgál.
A metódusban először megvizsgáljuk, hogy hány titkosításra vonatkozó elemet tartalmaz az üzenet. Csak nullánál nagyobb szám esetén történik feldolgozás.
private bool IsValidInfo(SoapContext cont) 
{
  bool good = false;
  if (cont.Security.Tokens.Count > 0)
  {
Megvizsgáljuk, hogy az üzenet tartalmaz-e aláírást.
    Signature signature = cont.Security.Elements[i] as Signature;
    if ( signature != null && ( signature.SignatureOptions & SignatureOptions.IncludeSoapBody) != 0 )
    {
Amennyiben igen, megvizsgáljuk, hogy a klienstől érkező üzenet UsernameToken objektumának UserName property-je a szervizt futtató számítógép Environment.UserName property-jében tárolt értéket tartalmazza, vagy sem. Amennyiben igen, akkor a metódus TRUE értékkel tér vissza.
      UsernameToken token = signature.SecurityToken as UsernameToken;
      if (token != null)
      {
        good = (token.Username == Environment.UserName)?true:false;              
      }
    }
  }
  return good;
}
A szerviz hitelesítési folyamatának második lépése, hogy megtörténik a jelszóellenőrzés. Ennek biztosítására a szervizben létre kell hozni egy, az IPasswordProvider interfészt implementáló osztályt, és annak GetPassword virtuális metódusában meg kell adni, hogy a szerviz milyen jelszót fogadhat el. A metódusban lehet elhelyezni a felhasználónév-jelszó összerendelési logika kódját, mely tartalmazhat adatbázis-elérést, vagy bárminemű ellenőrző mechanizmust. A példánkban a metódus a „password” karakterlánccal tér vissza, ez lesz a klienstől elfogadható jelszó értéke.
public class SecurityPwd: IPasswordProvider 
{
  ...
  public string GetPassword(UsernameToken token) 
  {
    return "password";
  }
}
A szerviz konfigurációs állományában, a Web.config állományban jeleznünk kell, hogy mely osztály implementálja az említett interfészt. A fájl <microsoft.web.services> elemében kell elhelyezni a következő bejegyzést:
<microsoft.web.services>
    <security>
      <passwordProvider type="WSEServer.SecurityPwd, WSEServer" />
    </security>
</microsoft.web.services>
Az osztály nevét kell megadnunk, valamint az azt tartalmazó assembly-t.
Proxy osztály készítése
A Visual Studio.NET beépített eszköze segítségével készíthetünk egy kliens proxy-t az alkalmazáshoz, melynek segítségével könnyen kapcsolat teremthető a szerviz metódusa és a hívó kliens program segítségével.
A %winroot%:\Program Files\Visual Studio.NET\FrameworkSDK\Bin mappában található program segítségével egy - a szerviz osztályával azonos nevű, .cs kiterjesztésű – állomány generálható, melyet a kliens projektbe felveszünk. A ValidatorService.cs állomány a következőképpen generálható parancssorból:
wsdl /out:ValidatorService.cs http://localhost/WSEServer/ValidatorService.asmx
A proxy osztály ősosztályának nevét meg kell változtatnunk, hiszen a WebServicesClientProtocol osztályból kell származtatni.
public class DataService : WebServicesClientProtocol
{
  ...
}
Ezt követően meg kell adnunk a proxy osztály állományának elején is a szükséges referenciát:
using Microsoft.Web.Services;
A kliens alkalmazás elkészítése
A kliensben a felhasználónév és a jelszó megadása után elindíthatjuk az átvitelt. A kezelőfüggvényben példányosítjuk a proxy-t.
ValidatorService vs = new ValidatorService();
A küldendő információ összeállításához létre kell hoznunk egy adatfolyam-objektumot:
SoapContext rContext = vs.RequestSoapContext;
A UsernameToken objektumban elhelyezzük a karakterláncokat:
UsernameToken token = new UsernameToken(textBox1.Text, textBox2.Text,PasswordOption.SendHashed);
Az aláírás Signature osztályából létrehozunk egy példányt.
Signature sign = new Signature(token);
A megadott adatokat elhelyezzük az üzenetben.
rContext.Security.Tokens.Add(token);
rContext.Security.Elements.Add(sign);
És meghívjuk a ControlUser metódust.
textBox3.Text = vs.ContolUser();

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