
Mellékelt példa megnyitása előtt szükséges egy WinAuthTest nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt 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.
Az alkalmazás használatához módosításokat kell eszközölni a web.config állományban. Ennek érdekében olvassa el a cikk „Mellékelt alkalmazás” szakaszában közölteket.
Az erőforrások biztonsága az egyik legfontosabb szempont Webes alkalmazások fejlesztésekor. Se vége, se hossza a hálózatban fellelhető Web-helyeknek, melyek mindegyike eltérő típusú, így eltérő biztonsági igényeket támaszt. A fejlesztőknek ezért tisztában kell lenniük a különböző biztonsági modellekkel, hogy minden alkalmazáshoz a legmegfelelőbbet válasszák ki.
Vannak olyan esetek, amikor nem akarunk a beépített lehetőségekkel élni, hanem valamilyen alternatív megoldást választunk. Azonban az esetek többségében a beépített konfigurációs lehetőségek jól használhatóak.
A biztonság kérdésének körbejárása előtt tisztáznunk kell néhány alapfogalmat, melyek a következők:
Az a folyamat, mely lehetővé teszi a külső kérés címzettjének, hogy megállapítsa a kérés feladójának „személyazonosságát”. Ehhez a vizsgálathoz a rendszer a bekért azonosítókat használja (felhasználói név, és jelszó). Az azonosítás után a felhasználó jogosult a kérés tejesítésére. Az érintett felhasználótól érkező következő kérés beérkezésekor már nem zajlik le a folyamat, hacsak nem történt kijelentkezés.
A folyamat, mely lehetővé teszi annak kiderítését, hogy az azonosított felhasználó része-e annak a csoportnak, mely hozzáférhet a kérdéses erőforráshoz. Helyi hálózatokban ez a folyamat a fájlrendszer jogosultsági rendszerén alapszik, mely jól szabályozható az NTFS-fájlrendszer segítségével. Az URL autorizáció más elven működik, itt a Web-alkalmazások konfigurációs beállításai szolgáltatásai képezik az alapját. Ez az ASP.NET-ben teljesen kiforrott, nem a Web-szerver konfigurációját egészíti ki, hanem önállóan valósítja meg azt.
Windows autentikáció
Ha az ASP.NET alkalmazásokban megengedett hitelesítési eljárások közül a Windows-alapú hitelesítést választjuk, alapvetően alkalmazásuk a hitelesítés tekintetében igen erőteljesen támaszkodik a Web-szerverünkre, közvetve pedig az alatta futó operációs rendszerre. Azt mondhatjuk a Web-szerver végzi a munka oroszlánrészét, és miután azonosította a kérés forrását, ezen azonosítót elérhetővé teszi az ASP.NET alkalmazás számára. ASP.NET alkalmazások esetén az Internet Information Services (IIS) tölti be a Web-szerver szerepét.
A kérés beérkezésekor az IIS a felhasználót azonosítja, majd továbbítja a kérést az ASP.NET alkalmazás felé egy jelsorozat (’token’) kíséretében, melyet a hitelesített felhasználóhoz csatol. Az ASP.NET alkalmazás ezt a jelsorozatot használja arra, hogy annak jogosultságokat adjon bizonyos erőforrásokhoz.
A Windows autentikációt jól használhatjuk például egy vállalaton belül, ahol az alkalmazás a vállalat Intranetjén fut. Minden domain-felhasználó, mely használja a rendszert, domain-azonosítóját használhatja fel a hálózatos erőforrások elérésére.
Az IIS és az ASP.NET együttműködése igen szoros. Amikor egy kérés érkezik az alkalmazás valamilyen erőforrására (például egy .aspx lapra), akkor egy, az IIS-en futó ISAPI DLL, nevesítve az Aspnet_isapi.dll-hez kerül a kérés, mely kezeli azt. Az ISAPI DLL a Web-szerverrel azonos processben fut, pontosabban az Inetinfo.exe állományban. A kérés továbbítódik az ASP.NET alkalmazás munkaszálához, az Aspnet_wp.exe-hez, mely aztán feldolgozza azt.
A Windows autentikáció az ASP.NET alkalmazások alapértelmezett eljárása, melynek beállításait az alkalmazás gyökérmappájában található web.config konfigurációs állományban tehetjük meg. Fontos tudni, hogy alkalmazásához nincs szükség az IIS konfigurációjának módosítására.
Mellékelt alkalmazás
Az alkalmazás konfigurációs állományában megadtunk egy Windows-felhasználót, melynek engedélyeztük a hozzáférést a WebForm1.aspx erőforráshoz. A felhasználó hitelesítése után megtörténik az autorizáció a beállításoknak megfelelően. A WebForm betöltődésekor egy ListBox-ban közöl néhány információt a bejelentkezett felhasználóról. Ehhez a System.Security.Principal névtér WindowsIdentity osztályát használjuk fel, melynek property-jeit lekérdezve kapjuk meg az adatokat:
private void Page_Load(object sender, System.EventArgs e)
{
Lekérdezzük a bejelentkezett felhasználó nevét:
infoList.Items.Add("Authorized user: " + WindowsIdentity.GetCurrent().Name.ToString());
Hogy autentikált-e a bejelentkezés:
infoList.Items.Add("IsAuthenticated?: " + WindowsIdentity.GetCurrent().IsAuthenticated.ToString());
Valamint az IIS által az alkalmazásnak átadott token-t:
infoList.Items.Add("Token: " + WindowsIdentity.GetCurrent().Token.ToString());
Ez a fajta eljárás implementálható a legkönnyebben, a legkisebb kódolás árán. Az alkalmazás web.config állományában megadjuk, hogy a Windows hitelesítést kívánjuk használni:
<authentication mode="Windows"/>
A példaalkalmazás nem tartalmaz valós adatokat az engedélyezett felhasználóval kapcsolatban, így betöltés előtt a következő bejegyzéseket ki kell egészíteni a megfelelő, saját rendszerben megtalálható felhasználó adataival.
Teszünk egy bejegyzést arra vonatkozóan, hogy az adott kérés legyen megszemélyesítve. Ennek hiányában a lapon a felhasználó neve helyett a rendszerazonosítóra utaló ’NT AUTHORITY/SYSTEM’ megnevezés lenne látható:
<identity impersonate="true" userName="sampleuser" password="pw" />
Megadjuk, hogy az érintett felhasználó kapjon csak engedélyt az erőforrás elérésére. Természetesen vesszővel elválasztva több ilyen felhasználó is megadható:
<authorization>
<allow users="DOMAIN NÉV\felhasználó"/>
<deny users="*" />
</authorization>
Az authorization bejegyzés jellemzői a következők:
| Albejegyzés |
Felhasználás |
Attribútumok |
Használat |
| <allow> |
Felhasználók engedélyezése. |
users |
Felhasználók nevei vesszővel elválasztva, domain-névvel együtt. A ’?’ jel anonymous felhasználók, a ’*’ jel minden felhasználó engedélyezését jelentik. |
| - |
- |
roles |
Engedélyezett felhasználói csoportok. |
| - |
- |
verbs |
HTTP metódusok engedélyezése. Regisztrált metódusok: "GET", "HEAD", "POST", és "DEBUG" |
| <deny> |
Felhasználók kizárása az engedélyezett körből. |
users |
Felhasználók nevei vesszővel elválasztva, domain-névvel együtt. A ’?’ jel anonymous felhasználók, a ’*’ jel minden felhasználó tiltását jelentik. |
| - |
- |
roles |
Tiltott felhasználói csoportok. |
| - |
- |
verbs |
HTTP metódusok tiltása. Regisztrált metódusok: "GET", "HEAD", "POST", és "DEBUG" |