Autentifikácia: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 3: Riadok 3:
 
__TOC__
 
__TOC__
  
= =
+
=Autentifikácia=
==Autentifikácia==
 
  
Autentifikácia predstavuje kľúčovú úlohu pri vytváraní bezpečnej komunikácie medzi klientom a webovou službou. Od identity klienta sa odvíja celý scenár komunikácie, preto sa samotnému overovanie klientov budeme venovať podrobnejšie. Overovanie predstavuje proces, ktorom sa zisťuje identita  užívateľa a zabezpečuje sa jej platnosť. V aplikáciách ASP.NET ju môžeme implementovať pomocou jedného z týchto štyroch systémov <nowiki>[</nowiki>1<nowiki>][</nowiki>4<nowiki>]</nowiki>:
+
Autentifikácia predstavuje kľúčovú úlohu pri vytváraní bezpečnej komunikácie medzi klientom a webovou službou. Od identity klienta sa odvíja celý scenár komunikácie, preto sa samotnému overovaniu klientov budeme venovať podrobnejšie. Overovanie predstavuje proces, v ktorom sa zisťuje identita  užívateľa a zabezpečuje sa jej platnosť. V aplikáciách ASP.NET ju môžeme implementovať pomocou jedného z týchto štyroch systémov <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>4<nowiki>]</nowiki>:
  
1. '''Formulárová autentifikácia'''. Tento typ overovania je založený na prihlasovacej stránke a existujúcej databáze užívateľov. Užívateľ dostane lístok, ktorý je kombináciu zakryptovaním hodnôt uložených v cookies. Pre webové služby sa nie je tento typ vhodný. Nakoľko webové služby sú bezstavové, a použitie cookies by ich zbytočne obmedzovalo.
+
1. '''Formulárová autentifikácia'''. Tento typ overovania je založený na prihlasovacej stránke a existujúcej databáze užívateľov. Užívateľ dostane lístok, ktorý je kombináciou zakryptovaných hodnôt uložených v cookies. Pre webové služby  nie je tento typ vhodný, kedže webové služby sú bezstavové a použitie cookies by ich zbytočne obmedzovalo.
  
2. '''Passportová autentifikácia'''. Využíva infraštruktúru Microsoft Passport. Ten implementuje centrálnu správu identít. Prihlasovacie údaje užívateľov sú spracovávané samostatným passportovým serverom. Tento spôsob overovanie je  neflexibilný, a v tejto práci sa mu podrobnejšie nebudeme venovať.
+
2. '''Passportová autentifikácia'''. Využíva infraštruktúru Microsoft Passport. Ten implementuje centrálnu správu identít. Prihlasovacie údaje užívateľov sú spracúvané samostatným passportovým serverom. Tento spôsob overovania je  neflexibilný a v tejto práci sa mu podrobnejšie nebudeme venovať.
  
 
3. '''Integrovaná autentifikácia Windows'''.
 
3. '''Integrovaná autentifikácia Windows'''.
Riadok 18: Riadok 17:
 
5. '''Vlastný typ autentifikačného procesu.'''
 
5. '''Vlastný typ autentifikačného procesu.'''
  
Posledné tri spôsoby overovania klientskych aplikácii si rozoberieme v samostatných podkapitolách, nakoľko sú vhodné pre autentifikáciu klientov webových služieb. Vysvetlíme si princípy, na ktorých sú založené. Oblasti, v ktorých sú nasadzované. Spomenieme výhody a nevýhody, ktoré so sebou prinášajú. A tak isto uvedieme ich programovú realizáciu v jazyku C<nowiki> </nowiki>.
+
Posledné tri spôsoby overovania klientskych aplikácií si rozoberieme v samostatných podkapitolách, nakoľko sú vhodné pre autentifikáciu klientov webových služieb. Vysvetlíme si princípy, na ktorých sú založené a oblasti, v ktorých sú nasadzované. Spomenieme výhody a nevýhody, ktoré so sebou prinášajú. A tak isto uvedieme ich programovú realizáciu v jazyku C<nowiki> </nowiki>.
  
  
 +
==Windows Autentifikácia==
  
===Windows Autentifikácia===
+
V tejto časti sa venujeme bezpečnosti webových služieb ASP.NET. Technológia Windows autentifikácie je úzko spojená s firmou Microsoft a tak isto operačnými systémami Windows od tejto spoločnosti. Jednou z najjednoduchších možností autentifikácie klientov webových služieb je ponechať túto autentifikáciu na webový server, napríklad ISS, respektíve na samotný operačný systém Windows. Princíp tohto typu autentifikácie je nasledovný <nowiki>[</nowiki>1<nowiki>]</nowiki>:
 
 
V tejto časťi sa venujeme bezpečnosti webových služieb ASP.NET. Technológia Windows autentifikácie je úzko spojená s firmou Microsoft a tak isto operačnými systémami Windows od tejto spoločnosti. Jednou z najjednoduchších možností autentifikácie klientov webových služieb, je ponechať túto autentifikáciu na webový server, napríklad ISS, respektíve na samotný operačný systém Windows. Princíp tohto typu autentifikácie je nasledovný <nowiki>[</nowiki>1<nowiki>]</nowiki>:
 
  
 
1. Webový server požiada klientsku aplikáciu o autentifikáciu.
 
1. Webový server požiada klientsku aplikáciu o autentifikáciu.
Riadok 30: Riadok 28:
 
2. Tá predloží prihlasovacie údaje.
 
2. Tá predloží prihlasovacie údaje.
  
3. Tie sú následné namapované na užívateľský účet Windows.
+
3. Tie sú následne namapované na užívateľský účet Windows.
 
 
 
 
  
Táto metóda overovania užívateľov je vhodná, ak našu webovú službu využíva menší a stabilný počet užívateľov, ktorý majú existujúce užívateľské účty Windows. Tento typ sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu.  Medzi výhody patrí <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>4<nowiki>]</nowiki> ,<nowiki>[</nowiki>7<nowiki>]</nowiki>:
+
Táto metóda overovania užívateľov je vhodná, ak našu webovú službu využíva menší a stabilný počet užívateľov, ktorí majú existujúce užívateľské účty Windows. Tento typ sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu.  Medzi výhody patrí <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>4<nowiki>]</nowiki>, <nowiki>[</nowiki>7<nowiki>]</nowiki>:
  
 
* Využitie existujúcich účtov Windows.
 
* Využitie existujúcich účtov Windows.
* Využitie samotného zabezpečenia operačného systému Windows a impersonácie. Môžeme využiť už  existujúce oprávnenie užívateľských účtov, napríklad pre  prístup k súborom. Programový kód ASP.NET je vykonávaný pod fixným účtom pre službu IIS 5.x  je to účet ASP.NET a pre IIS 6.0 je to účet Network Service. Použitie pevného účtu ma veľa dôvodov. Skoro vo všetkých prípadoch sú práva pridelené užívateľom, oveľa menšie ako sú práva potrebné pre aplikáciu. Existuje mechanizmus, pomocou ktorého je možné spúšťať programový kód pod prevzatou identitou. Jedná sa o tzv. impersonáciu. Takýto model je vhodné použiť pre lokálne siete, s malým počtom užívateľov, ktorý majú korektne zadefinované užívateľské oprávanie Windows. Impersonácia bude vysvetlená  v podkapitole 5.2.1.
+
* Využitie samotného zabezpečenia operačného systému Windows a impersonácie. Môžeme využiť už  existujúce oprávnenie užívateľských účtov, napríklad pre  prístup k súborom. Programový kód ASP.NET je vykonávaný pod fixným účtom, pre službu IIS 5.x  je to účet ASP.NET a pre IIS 6.0 je to účet Network Service. Použitie pevného účtu veľa dôvodov. Skoro vo všetkých prípadoch sú práva pridelené užívateľom oveľa menšie ako sú práva potrebné pre aplikáciu. Existuje mechanizmus, pomocou ktorého je možné spúšťať programový kód pod prevzatou identitou. Ide o tzv. impersonáciu. Takýto model je vhodné použiť pre lokálne siete s malým počtom užívateľov, ktorí majú korektne zadefinované užívateľské oprávnenie Windows. Impersonácia bude vysvetlená  v podkapitole 5.2.1.
 
* Pri tomto type nie je nutné vytvárať prihlasovaciu stránku ani databázu užívateľov, čiže táto metóda nie je z programátorského hľadiska časovo náročná.
 
* Pri tomto type nie je nutné vytvárať prihlasovaciu stránku ani databázu užívateľov, čiže táto metóda nie je z programátorského hľadiska časovo náročná.
Existuje však veľa dôvodov, prečo sa tomuto spôsobu overovania vyhnúť. Napríklad <nowiki>[</nowiki>7<nowiki>]</nowiki> ,<nowiki>[</nowiki>9<nowiki>]</nowiki>:
+
Existuje však veľa dôvodov, prečo sa tomuto spôsobu overovania vyhnúť. Napríklad <nowiki>[</nowiki>7<nowiki>]</nowiki>, <nowiki>[</nowiki>9<nowiki>]</nowiki>:
 
 
  
* Tento typ autentifikácie nie je veľmi flexibilný, a veľmi zle sa prispôsobuje.
+
* Tento typ autentifikácie nie je veľmi flexibilný a veľmi zle sa prispôsobuje.
* Dochádza pri ňom naviazaniu na užívateľské účty.
+
* Dochádza pri ňom k naviazaniu na užívateľské účty.
* Je nevyhnutné, aby klienti webovej služby mali operačný systém od spoločnosti Microsoft, kvôli korektnej autentifikácii webovým serverom IIS.
+
* Je nevyhnutné, aby klienti webovej služby mali operačný systém od spoločnosti Microsoft kvôli korektnej autentifikácii webovým serverom IIS.
* Táto metóda neumožňuje riadiť autentifikačný proces. A predstavuje veľký problém pokiaľ má byť webová služba verejná.
+
* Táto metóda neumožňuje riadiť autentifikačný proces. Predstavuje to veľký problém, pokiaľ má byť webová služba verejná.
Pri Windows autentifikácii je overovanie klienta vykonávané webovým serverom IIS. Ten môže overiť a autorizovať klienta ešte skôr, ako webová aplikácia (napr. webová služba) začne obsluhovať jeho požiadavku. IIS má niekoľko bezpečnostných mechanizmov pomocou, ktorých môže  overiť, autorizovať klienta, zabezpečiť dôvernosť a integritu komunikácie.
+
Pri Windows autentifikácii je overovanie klienta vykonávané webovým serverom IIS. Ten môže overiť a autorizovať klienta ešte skôr, ako webová aplikácia (napr. webová služba) začne obsluhovať jeho požiadavku. IIS má niekoľko bezpečnostných mechanizmov pomocou ktorých môže  overiť, autorizovať klienta, zabezpečiť dôvernosť a integritu komunikácie.
  
  
 
+
===Služba Internet Information Service===
====Služba Internet Information Service====
 
  
 
Webový server IIS zabezpečuje korektné prostredie pre beh aplikácie typu klient – server.
 
Webový server IIS zabezpečuje korektné prostredie pre beh aplikácie typu klient – server.
  
K autentifikácii klientov má k dispozícii niekoľko stratégii. Môže použiť na overenie klienta <nowiki>[</nowiki>4<nowiki>]</nowiki> :
+
K autentifikácii klientov má k dispozícii niekoľko stratégií. Môže použiť na overenie klienta <nowiki>[</nowiki>4<nowiki>]</nowiki> :
 
 
* '''Základná autentifikáciu. '''Túto metódu vyvinulo konzorcium W3C. Definuje dodatočnú hlavičku HTTP, v ktorej sú prenášané užívateľské mená a heslá. Dáta nie sú kryptované, ale sú kódované vo formáte Base64. Tento typ je nutné používať s SSL.
 
* '''Digestívna autentifikáciu. '''Je podobná základnej autentifikácii, prihlasovacie údaje nie sú prenášané v kódovaní Base64 ale sú hašované. Tento spôsob nie je veľmi rozšírení, našiel uplatnenie len v intranetoch.
 
* '''Integrovanú autentifikáciu Windows'''. Pri tomto type autentifikácie, je overovanie užívateľa ponechané na samotný operačný systém. Využíva sa 96 bitové číslo SID (Secure identifier), ktoré slúži na identifikáciu každého prihláseného užívateľa. Identita každého prihláseného užívateľa sa predáva vo forme tokenu. Pretože integrovaná autentifikácia Windows je najvhodnejším overovacím štandardom pre intranetové aplikácie založené na WAN alebo LAN, budeme sa je venovať v nasledujúcej podkapitole.
 
  
 +
* '''Základnú autentifikáciu. '''Túto metódu vyvinulo konzorcium W3C. Definuje dodatočnú hlavičku HTTP, v ktorej sú prenášané užívateľské mená a heslá. Dáta nie sú kryptované, ale sú kódované vo formáte Base64. Tento typ je nutné používať s SSL.
 +
* '''Digestívnu autentifikáciu. '''Je podobná základnej autentifikácii, prihlasovacie údaje nie sú prenášané v kódovaní Base64, ale sú hašované. Tento spôsob nie je veľmi rozšírený, našiel uplatnenie len v intranetoch.
 +
* '''Integrovanú autentifikáciu Windows'''. Pri tomto type autentifikácie je overovanie užívateľa ponechané na samotný operačný systém. Využíva sa 96 bitové číslo SID (Secure identifier), ktoré slúži na identifikáciu každého prihláseného užívateľa. Identita každého prihláseného užívateľa sa predáva vo forme tokenu. Pretože integrovaná autentifikácia Windows je najvhodnejším overovacím štandardom pre intranetové aplikácie založené na WAN alebo LAN, budeme sa jej venovať v nasledujúcej podkapitole.
  
  
===Integrovaná autentifikácia Windows===
+
==Integrovaná autentifikácia Windows==
  
Podmienkou korektného fungovania tohto typu overovania užívateľov, je to že klient aj webový server sa musia nachádzať na rovnakej lokálnej sieti. Pri tejto metóde sa neprenášajú mená a heslá užívateľov, ale spolupracuje s doménovým serverom alebo inštanciou Active Directory <nowiki>[</nowiki>1<nowiki>]</nowiki>. Na prenos prihlasovacích údajov sa využíva autentifikačný protokol NTLM (NT LAN Manager) alebo protokol Kerberos 5. Druh overovacieho protokolu závisí od operačného systému klienta a serveru. Pokiaľ sa jedná o operačný systém Windows 2000 a vyšší ako autentifikačný protokol je použitý Kerberos 5, inak bude overovanie realizované prostredníctvom NTLM. <nowiki>[</nowiki>4<nowiki>]</nowiki>
+
Podmienkou korektného fungovania tohto typu overovania užívateľov je to, že klient aj webový server sa musia nachádzať na rovnakej lokálnej sieti. Pri tejto metóde sa neprenášajú mená a heslá užívateľov, ale spolupracuje s doménovým serverom alebo inštanciou Active Directory. <nowiki>[</nowiki>1<nowiki>]</nowiki> Na prenos prihlasovacích údajov sa využíva autentifikačný protokol NTLM (NT LAN Manager) alebo protokol Kerberos 5. Druh overovacieho protokolu závisí od operačného systému klienta a serveru. Pokiaľ ide o operačný systém Windows 2000 a vyšší ako autentifikačný protokol je použitý Kerberos 5, inak bude overovanie realizované prostredníctvom NTLM. <nowiki>[</nowiki>4<nowiki>]</nowiki>
  
 
V tejto podkapitole si rozoberieme nasledujúce schémy integrovaného overovania Windows <nowiki>[</nowiki>9<nowiki>]</nowiki>:
 
V tejto podkapitole si rozoberieme nasledujúce schémy integrovaného overovania Windows <nowiki>[</nowiki>9<nowiki>]</nowiki>:
  
* Integrované overenie systému Windows s impersonáciou
+
* Integrované overenie systému Windows s impersonáciou.
* Integrované overenie systému Windows bez impersonácie
+
* Integrované overenie systému Windows bez impersonácie.
* Integrované overenie systému Windows s preddefinovanou identitou
+
* Integrované overenie systému Windows s preddefinovanou identitou.
Ale skôr ako sa začneme venovať samotnej integrovanej autentifikácii systémom Windows je vhodné si objasniť proces impersonácie.
+
Ale skôr ako sa začneme venovať samotnej integrovanej autentifikácii systému Windows, je vhodné si objasniť proces impersonácie.
 
 
  
  
====Impersonácia====
+
===Impersonácia===
  
Impersonácia je proces vykonávania programového kódu v kontexte identity iného užívateľa. Ako už bolo spomenuté kód webovej služby ASP.NET beží pod fixným účtom, typ účtu závisí od verzie služby IIS. Dôvody použitia impersonácie sú nasledovné <nowiki>[</nowiki>1<nowiki>]</nowiki>,<nowiki>[</nowiki>4<nowiki>]</nowiki>:
+
Impersonácia je proces vykonávania programového kódu v kontexte identity iného užívateľa. Ako už bolo spomenuté, kód webovej služby ASP.NET beží pod fixným účtom, typ účtu závisí od verzie služby IIS. Dôvody použitia impersonácie sú nasledovné <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>4<nowiki>]</nowiki>:
  
 
* Zvýšenie flexibility systému. Pre každého užívateľa môžeme prideliť rôzne prístupové práva a vyhneme sa tým použitiu fixného účtu pre všetkých užívateľov.
 
* Zvýšenie flexibility systému. Pre každého užívateľa môžeme prideliť rôzne prístupové práva a vyhneme sa tým použitiu fixného účtu pre všetkých užívateľov.
* Rozlíšenie práv pre jednotlivé webové aplikácie na rovnakom počítači. V situácii, keď webový server používa veľké množstvo personalizovaných adresárov, môžeme pomocou impersonácie, zabrániť aby aplikácia nesprístupnila užívateľovi iné adresáre, ako tie na ktoré nemá oprávnenie.
+
* Rozlíšenie práv pre jednotlivé webové aplikácie na rovnakom počítači. V situácii, keď webový server používa veľké množstvo personalizovaných adresárov, môžeme pomocou impersonácie zabrániť, aby aplikácia nesprístupnila užívateľovi iné adresáre ako tie, na ktoré oprávnenie.
 
ASP.NET podporuje dva typy impersonácie <nowiki>[</nowiki>15<nowiki>]</nowiki>:
 
ASP.NET podporuje dva typy impersonácie <nowiki>[</nowiki>15<nowiki>]</nowiki>:
  
* Konfiguračnú, prostredníctvom konfiguračného súboru '''web.confing''' webovej služby.
+
* Konfiguračnú, prostredníctvom konfiguračného súboru '''web.config''' webovej služby.
* A programovú, ktorá umožňuje prepnutie identity v rámci programu.
+
* Programovú, ktorá umožňuje prepnutie identity v rámci programu.
 
 
 
 
  
=====Konfiguračná impersonácia=====
 
  
Predstavuje najjednoduchšiu formu impersonácie prostredníctvom nadefinovania v konfiguračnom súbore web.confing pomocou prvku '''<nowiki><</nowiki>identity<nowiki>></nowiki>, '''ktorého hodnotu nastavíme na '''true. '''<nowiki>[</nowiki>1<nowiki>]</nowiki>''' '''(pozri Tab. 5.1)
+
====Konfiguračná impersonácia====
  
 +
Predstavuje najjednoduchšiu formu impersonácie prostredníctvom nadefinovania v konfiguračnom súbore web.config pomocou prvku '''<nowiki><</nowiki>identity<nowiki>></nowiki>, '''ktorého hodnotu nastavíme na '''true. '''<nowiki>[</nowiki>1<nowiki>]</nowiki>
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 105: Riadok 95:
 
|}
 
|}
  
 
+
ASP.NET umožňuje pevné nastavenie identity, pod ktorou bude spúšťaný kód webovej služby.
ASP.NET umožňuje pevné nastavenie identity, pod ktorou bude spúšťaní kód webovej služby. (pozri Tab. 5.2)
 
 
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 118: Riadok 106:
  
  
 
+
====Programová impersonácia====
=====Programová impersonácia=====
 
  
 
V tejto podkapitole si vysvetlíme programovú impersonáciu s využitím platformy .NET Framework. Umožňuje väčšiu kontrolu  nad procesom. Pre programovú impersonáciu sa využíva metóda '''WindowsIdentity.Impersonate()''', ktorá je súčasťou menného priestoru''' System.Security.Principal. '''<nowiki>[</nowiki>9<nowiki>]</nowiki>
 
V tejto podkapitole si vysvetlíme programovú impersonáciu s využitím platformy .NET Framework. Umožňuje väčšiu kontrolu  nad procesom. Pre programovú impersonáciu sa využíva metóda '''WindowsIdentity.Impersonate()''', ktorá je súčasťou menného priestoru''' System.Security.Principal. '''<nowiki>[</nowiki>9<nowiki>]</nowiki>
Riadok 127: Riadok 114:
 
1. Najskôr získame príznak účtu Windows, ktorý chceme zosobniť.
 
1. Najskôr získame príznak účtu Windows, ktorý chceme zosobniť.
  
2. Pomocou metódy WindowsIdentity.Impersonate(), spustíme proces impersonácie. Návratová hodnota tejto metódy je objekt '''WindowsImpersonationContext'''.
+
2. Pomocou metódy WindowsIdentity.Impersonate() spustíme proces impersonácie. Návratová hodnota tejto metódy je objekt '''WindowsImpersonationContext'''.
  
3. Návrat k pôvodnej identite dosiahneme zavolaným metódy '''Undo() '''objektu WindowsImpersonationContext.
+
3. Návrat k pôvodnej identite dosiahneme zavolaním metódy '''Undo() '''objektu WindowsImpersonationContext.
  
 
Príznaky užívateľských účtov sú v platforme .NET reprezentované pomocou objektu IntPtr. Tento objekt  reprezentuje ukazovatele do oblasti neriadenej pamäte.
 
Príznaky užívateľských účtov sú v platforme .NET reprezentované pomocou objektu IntPtr. Tento objekt  reprezentuje ukazovatele do oblasti neriadenej pamäte.
  
 
Získanie príznaku účtu aktuálneho prihláseného užívateľa je Tab. 5.3.
 
Získanie príznaku účtu aktuálneho prihláseného užívateľa je Tab. 5.3.
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 145: Riadok 131:
  
 
Samotná impersonácia pomocou príznaku účtu s využitím metódy Impersonate() je v Tab. 5.4.
 
Samotná impersonácia pomocou príznaku účtu s využitím metódy Impersonate() je v Tab. 5.4.
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 157: Riadok 142:
  
  
 +
===Integrované overenie službou Windows s impersonáciou===
  
====Integrované overenie službou Windows s impersonáciou====
+
Spôsoby realizácie impersonácie sme si vysvetlili v kapitole 5.2.1 Pre korektné využitie tohto typu overovania klientskych aplikácií je nutné zadeklarovať ten typ autentifikácie v konfiguračnom súbore webovej služby web.config prostredníctvom prvku '''<nowiki><</nowiki>authentication mode<nowiki>></nowiki>, '''ktorý nastavíme na typ Windows'''. '''Samotnú impersonáciu povolíme prostredníctvom prvku '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> ''', ktorý nastavíme na hodnotu''' true'''. <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>4<nowiki>]</nowiki>
 
 
Spôsoby realizácie impersonácie sme si vysvetlili v kapitole 5.2.1 Pre korektné využitie tohto typu overovania klientskych aplikácii je nutné zadeklarovať ten typ autentifikácie v konfiguračnom súbore webovej služby web.config prostredníctvom prvku '''<nowiki><</nowiki>authentication mode<nowiki>></nowiki>, '''ktorý nastavíme na typ Windows'''. '''Samotnú impersonáciu povolíme prostredníctvom prvku '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> ''', ktorý nastavíme na hodnotu''' true'''. (pozri Tab. 5.5) <nowiki>[</nowiki>1<nowiki>][</nowiki>4<nowiki>]</nowiki>
 
 
 
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 177: Riadok 160:
  
  
Táto konfigurácia zosobní kód webovej služby ASP.NET užívateľa, ktorý bol overení službou IIS. Pre zosobnenie kódu webovej služby je nutné zakázať anonymný prístup v službe IIS. Ak je v službe IIS povolený anonymný prístup,  kód ASP.NET bude spustený pod účtom hosťa v Internetu, implicitne účet IUSER_POČÍTAČ.
+
Táto konfigurácia zosobní kód webovej služby ASP.NET užívateľa, ktorý bol overený službou IIS. Pre zosobnenie kódu webovej služby je nutné zakázať anonymný prístup v službe IIS. Ak je v službe IIS povolený anonymný prístup,  kód ASP.NET bude spustený pod účtom hosťa v Internete, implicitne účet IUSER_POČÍTAČ.
  
 
Pri tomto spôsobe autentifikácie máme tieto možnosti na autorizáciu klienta <nowiki>[</nowiki>1<nowiki>]</nowiki>:
 
Pri tomto spôsobe autentifikácie máme tieto možnosti na autorizáciu klienta <nowiki>[</nowiki>1<nowiki>]</nowiki>:
  
* Zoznamy ACL (Access Control List) prostredníctvom nich môžeme obmedziť prístup k súborom webovej služby a prostriedkom, ktoré využíva.
+
* Zoznamy ACL (Access control list). Prostredníctvom nich môžeme obmedziť prístup k súborom webovej služby a prostriedkom, ktoré využíva.
* Autorizácia prostredníctvom adresy URL, ktorá sa realizuje konfiguračne v súbore web.confing webovej služby alebo v súbore machine.confing.
+
* Autorizácia prostredníctvom adresy URL, ktorá sa realizuje konfiguračne v súbore web.config webovej služby alebo v súbore machine.confing.
 
Tento typ integrovaného overovania Windows je vhodné pre webové služby použiť v nasledujúcich situáciách <nowiki>[</nowiki>4<nowiki>]</nowiki>:
 
Tento typ integrovaného overovania Windows je vhodné pre webové služby použiť v nasledujúcich situáciách <nowiki>[</nowiki>4<nowiki>]</nowiki>:
  
 
* Pokiaľ majú byť užívatelia webovej služby overovaní na základe existujúcich účtov Windows.
 
* Pokiaľ majú byť užívatelia webovej služby overovaní na základe existujúcich účtov Windows.
* Ak má byť kontext zabezpečenia spúšťajúceho užívateľa webovou službou  predaní do ďalšej vrstvy.
+
* Ak má byť kontext zabezpečenia spúšťajúceho užívateľa webovou službou  poslaný do ďalšej vrstvy.
  
====Integrované overenie systému Windows bez impersonácie====
 
  
Tento model overovanie je, po stránke konfiguračného zabezpečenia totožný s integrovaním overovaním Windows s impersonáciou. Jediný rozdiel je v tom, že v konfiguračnom súbore webovej služby web.confing je prvok '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> '''nastavení na hodnotu '''false'''. (pozri Tab. 5.6) <nowiki>[</nowiki>3<nowiki>]</nowiki>
+
===Integrované overenie systému Windows bez impersonácie===
  
 +
Tento model overovania je po stránke konfiguračného zabezpečenia totožný s integrovaným overovaním Windows s impersonáciou. Jediný rozdiel je v tom, že v konfiguračnom súbore webovej služby web.config je prvok '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> '''nastavený na hodnotu '''false'''.  <nowiki>[</nowiki>3<nowiki>]</nowiki>
  
 
{|class="wikitable"
 
{|class="wikitable"
Riadok 208: Riadok 191:
 
Možnosti autorizácie a scenáre nasadenia tohto modelu sú rovnaké ako v predchádzajúcej kapitole Integrované overenie službou Windows s impersonáciou, preto ich neuvádzame.
 
Možnosti autorizácie a scenáre nasadenia tohto modelu sú rovnaké ako v predchádzajúcej kapitole Integrované overenie službou Windows s impersonáciou, preto ich neuvádzame.
  
 +
===Integrované overenie systému Windows s preddefinovanou identitou===
  
 +
Použitie pevnej identity  pre proces ASP.NET  nie je veľmi vhodné a zaužívané riešenie. Nakoľko implicitne je proces ASP.NET spúšťaný pod fixným účtom, ktorý je dobre zabezpečený, jeho typ záleží od verzie služby IIS. Pokiaľ by sme chceli spúšťať proces ASP.NET pod naším preddefinovaným fixným účtom, museli by sme mu zadefinovať veľmi silné oprávnenia. Pri zlej konfigurácii účtu to môže predstavovať veľmi silné  bezpečnostné riziko. <nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>2<nowiki>]</nowiki>
  
====Integrované overenie systému Windows s preddefinovanou identitou====
+
:Takisto ako v predchádzajúcich dvoch schémach integrovaného overovania Windows, sa aj tento typ overovania realizuje konfiguračne v súbore web.config webovej služby, kde sa hodnota prvku  '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> '''nastaví na hodnotu''' true '''a v samotnom prvku uvedieme užívateľské meno a heslo účtu. Z dôvodu zvýšenia bezpečnosti môžeme využiť nástroj '''aspnet_setreg.exe '''na zakryptovanie prihlasovacích informácií. <nowiki>[</nowiki>9<nowiki>]</nowiki>, <nowiki>[</nowiki>29<nowiki>]</nowiki>
 
 
Použitie pevnej identity  pre proces ASP.NET  nie je veľmi vhodné a zaužívané riešenie. Nakoľko implicitne je proces ASP.NET spúšťaní pod fixným účtom, ktorý dobre zabezpečení, jeho typ záleží od verzie služby IIS. Pokiaľ by sme chceli spúšťať proces ASP.NET pod našim preddefinovaným fixným účtom, museli by sme mu zadefinovať veľmi silné oprávnenia. Pri zlej konfigurácii účtu, to môže predstavovať veľmi silné  bezpečnostné riziko.<nowiki>[</nowiki>1<nowiki>]</nowiki>, <nowiki>[</nowiki>2<nowiki>]</nowiki>
 
 
 
:Takisto ako v predchádzajúcich dvoch schémach integrovaného overovanie Windows, sa aj tento typ overovania sa realizuje konfiguračne v súbore web.confing webovej služby, kde sa hodnota prvku  '''<nowiki><</nowiki>identity impersonate<nowiki>></nowiki> '''nastaví na hodnotu''' true '''a v samotnom prvku uvedieme užívateľské meno a heslo účtu. Z dôvodu zvýšenia bezpečnosti môžeme využiť nástroj '''aspnet_setreg.exe '''na zakryptovanie prihlasovacích informácii <nowiki>[</nowiki>9<nowiki>]</nowiki>, <nowiki>[</nowiki>29<nowiki>]</nowiki>.
 
  
 
Samotná konfigurácia integrovaného overovania Windows s preddefinovaným pevným účtom je v Tab. 5.7.
 
Samotná konfigurácia integrovaného overovania Windows s preddefinovaným pevným účtom je v Tab. 5.7.
Riadok 234: Riadok 215:
 
|}
 
|}
  
V tejto kapitole sme sa venovali autentifikácii Windows. Tento model overovania sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Podrobnejšie sme sa venovali integrovanej autentifikácii Windows, nakoľko predstavuje „štandard" pre intranetové aplikácie založené na WAN alebo LAN sieťach. Z  toho dôvodu je využívaná v malých podnikových sieťach. <nowiki>[</nowiki>4<nowiki>]</nowiki>
+
V tejto kapitole sme sa venovali autentifikácii Windows. Tento model overovania sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Podrobnejšie sme sa venovali integrovanej autentifikácii Windows, nakoľko predstavuje štandard pre intranetové aplikácie založené na WAN alebo LAN sieťach. Z  toho dôvodu je využívaná v malých podnikových sieťach. <nowiki>[</nowiki>4<nowiki>]</nowiki>
  
  
 +
==Autentifikácia založená na certifikátoch==
  
===Autentifikácia založená na certifikátoch===
+
Samotný princíp a fungovanie certifikátov sme si vysvetlili v podkapitole 4.1.1. Overovanie klientskych certifikátov môžeme vo webovej službe využiť na overovanie:
  
Samotný princíp a fungovanie certifikátov sme si vysvetlili v kapitole Princíp certifikátov a certifikát X.509. Overovanie klientskych certifikátov môžeme vo webovej službe využiť na overovanie:
+
* klientskych a serverových aplikácií volajúcich webovú službu,
 +
* iných webových služieb.
 +
Existujú niektoré obmedzenia, s ktorými sa môžeme stretnúť pri overovaní klientskych aplikácií prostredníctvom certifikátov, v tejto kapitole sa pokúsime niektoré z nich načrtnúť a takisto ponúknuť aj riešenie.
  
* na klientskych a serverových aplikácii volajúcich webovú službu,
 
* iných webových služieb.
 
Existujú niektoré obmedzenia, s ktorými sa môžeme stretnúť pri overovaní klientskych aplikácii prostredníctvom certifikátov, v tejto kapitole sa pokúsime niektoré z nich načrtnúť a tak isto ponúknuť aj riešenie.
 
  
====Proces autentifikácie klientskych certifikátov====
+
===Proces autentifikácie klientskych certifikátov===
  
Problém vzniká ak klient komunikuje s webovou službou prostredníctvom  webovej aplikácii. Webová aplikácia môže overiť klientsky certifikát, ale ten istý certifikát nie je možné použiť na overenie webovou službou. Webová aplikácia nemôže predať klientsky certifikát spúšťajúceho užívateľa do webovej služby. Dôvod je nasledovný: webová aplikácia nemá prístup k súkromnému kľúču klienta. (pozri  Obr. 5.1) <nowiki>[</nowiki>16<nowiki>]</nowiki>
+
Problém vzniká, ak klient komunikuje s webovou službou prostredníctvom  webovej aplikácie. Webová aplikácia môže overiť klientsky certifikát, ale ten istý certifikát nie je možné použiť na overenie webovou službou. Webová aplikácia nemôže poskytnúť klientsky certifikát spúšťajúceho užívateľa do webovej službe. Dôvod je nasledovný: webová aplikácia nemá prístup k súkromnému kľúču klienta. <nowiki>[</nowiki>16<nowiki>]</nowiki>
  
  
 
[[Súbor:dp_2010_jm_7.png|framed|center|Obr. 5.1 Problém overovania klientskych certifikátov webovou službou]]
 
[[Súbor:dp_2010_jm_7.png|framed|center|Obr. 5.1 Problém overovania klientskych certifikátov webovou službou]]
  
====Poces autentifikácie klientského certifikátu prostredníctvom podsystému====
+
===Proces autentifikácie klientskeho certifikátu prostredníctvom podsystému===
  
V tejto podkapitole sa oboznámime s riešením problému, ktorý sme si načrtli v podkapitole Proces autentifikácie klientskych certifikátov. Riešenie nášho problému môže byť odstránený nasledujúcim komunikačným scenárom <nowiki>[</nowiki>16<nowiki>]</nowiki>:
+
V tejto podkapitole sa oboznámime s riešením problému, ktorý sme si načrtli v podkapitole Proces autentifikácie klientskych certifikátov. Riešenie nášho problému môže byť odstránené nasledujúcim komunikačným scenárom <nowiki>[</nowiki>16<nowiki>]</nowiki>:
  
 
1. Klient volá webovú službu prostredníctvom webovej aplikácie.
 
1. Klient volá webovú službu prostredníctvom webovej aplikácie.
  
2. Aplikácia plný úlohu autentifikácie a autorizácie klienta a je zodpovedná za svojich klientov.
+
2. Aplikácia plní úlohu autentifikácie a autorizácie klienta a je zodpovedná za svojich klientov.
  
3. Po úspešnom overení, na základe existencie členstva klienta v nejakej roli webová aplikácia môže volať webovú službu prostredníctvom rôznych certifikátov. Tým je zabezpečená existencia viacerých užívateľských rolí vo webovej službe.
+
3. Po úspešnom overení na základe existencie členstva klienta v nejakej roli webová aplikácia môže volať webovú službu prostredníctvom rôznych certifikátov. Tým je zabezpečená existencia viacerých užívateľských rolí vo webovej službe.
  
4. Webová služba autorizuje webovú aplikáciu na základe  certifikátu, ktorý obdržala od nej.
+
4. Webová služba autorizuje webovú aplikáciu na základe  certifikátu, ktorý od nej dostala.
  
 
Dôvernosť a integrita komunikácie medzi  serverom webovej aplikácie a webovou službou je zabezpečená použitím protokolu SSL alebo IPSec. Prostredníctvom certifikátov je ošetrený neautorizovaný prístup. Celý  komunikačný scenár je znázornený na Obr. 5.2.
 
Dôvernosť a integrita komunikácie medzi  serverom webovej aplikácie a webovou službou je zabezpečená použitím protokolu SSL alebo IPSec. Prostredníctvom certifikátov je ošetrený neautorizovaný prístup. Celý  komunikačný scenár je znázornený na Obr. 5.2.
Riadok 270: Riadok 251:
 
[[Súbor:dp_2010_jm_8.png|framed|center|Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému]]
 
[[Súbor:dp_2010_jm_8.png|framed|center|Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému]]
  
====Implementácia overovanie klientov webovou službou prostredníctvom podsystému na platforme .NET Framework s využitím serverovej aplikácie====
+
===Implementácia overovanie klientov webovou službou prostredníctvom podsystému na platforme .NET Framework s využitím serverovej aplikácie===
 
+
Z dôvodu, že webová aplikácia ASP.NET nemá priamy prístup k certifikátom, musíme použiť dodatočný proces, ktorý zabezpečí volanie webovej služby a predanie samotných certifikátov službe. Proces musí byť nakonfigurovaný tak, aby bol spúšťaný s pridruženým užívateľským profilom, pretože ASP.NET aplikácia nemá načítaný príslušný užívateľský proces a k nemu zodpovedajúce úložisko certifikátov. Tento scenár môžeme realizovať prostredníctvom <nowiki>[</nowiki>16<nowiki>]</nowiki>:
Z dôvodu, že webová aplikácia ASP.NET nemá priamy prístup k certifikátom musíme použiť dodatočný proces, ktorý zabezpečí volanie webovej služby a predávanie samotných certifikátov službe. Proces musí byť nakonfigurovaný tak, aby bol spúšťaní s pridružením užívateľským profilom, pretože ASP.NET aplikácia nemá načítaný príslušný užívateľský proces a k nemu zodpovedajúce úložisko certifikátov. Tento scenár môžeme realizovať prostredníctvom <nowiki>[</nowiki>16<nowiki>]</nowiki>:
 
  
 
* služby systému Windows,
 
* služby systému Windows,
Riadok 283: Riadok 263:
 
2. Webová aplikácia ASP.NET autorizuje prístup klientov k webovej službe.
 
2. Webová aplikácia ASP.NET autorizuje prístup klientov k webovej službe.
  
3. ASP.NET aplikácia volá  príslušnú serverovú komponentu (je spúšťaná iba v serverovom procese).
+
3. ASP.NET aplikácia volá  príslušný serverový komponent (ten je spúšťaný iba v serverovom procese).
  
4. Serverová aplikácia je spúšťaná pod konkrétnym účtom. K nemu je pridružení užívateľský profil. Serverový komponent načíta certifikát z úložiska certifikátov. Ten je použitý webovou službou na overenie webovej aplikácie.
+
4. Serverová aplikácia je spúšťaná pod konkrétnym účtom. K nemu je pridružený užívateľský profil. Serverový komponent načíta certifikát z úložiska certifikátov. Ten je použitý webovou službou na overenie webovej aplikácie.
  
 
5. Serverový komponent volá webovú službu ASP.NET a predáva jej klientsky certifikát.
 
5. Serverový komponent volá webovú službu ASP.NET a predáva jej klientsky certifikát.
  
Celý proces overovanie certifikátov s využitím serverového komponentu je znázornené na Obr. 5.3.
+
Celý proces overovania certifikátov s využitím serverového komponentu je znázornený na Obr. 5.3.
  
  
 
[[Súbor:dp_2010_jm_9.png||framed|center|Obr. 5.3 Overovanie klientov webovou službou s využitím serverovej aplikácie <nowiki>[</nowiki>16<nowiki>]</nowiki> ]]
 
[[Súbor:dp_2010_jm_9.png||framed|center|Obr. 5.3 Overovanie klientov webovou službou s využitím serverovej aplikácie <nowiki>[</nowiki>16<nowiki>]</nowiki> ]]
  
 +
Takýto scenár server / server  funguje za predpokladu, že webová aplikácia správne autentifikovala a autorizovala klienta.  Použitie dodatočného procesu na prístup k certifikátom je nutný z toho dôvodu, že účet ASP.NET nemá prístup  k žiadnemu certifikátu na webovom serveri. Každý certifikát je spracovávaný v rámci užívateľského profilu s pridruženým účtom.
  
Takýto scenár server / server  funguje za predpokladu, že webová aplikácie správne autentifikovala a autorizovala klienta.  Použitie dodatočného procesu na prístup k certifikátom je nutný z toho dôvodu, že účet ASP.NET nemá prístup  k žiadnemu certifikátu na webovom servery. Každý certifikát je spracovávaný v rámci užívateľského profilu s pridružením účtom.
+
===Overovanie desktopových aplikácií prostredníctvom klientskych certifikátov webovou službou===
  
====Overovanie desktopových aplikácii prostredníctvom klientskych certifikátov webovou službou====
+
Doteraz sme sa zaoberali prípadom, v ktorom konzumentom XML ASP.NET webovej služby bola webová aplikácia, napríklad ASP.NET stránka. V tejto práci budeme neskôr vyvíjať vlastnú bezpečnostnú platformu pre XML ASP.NET webové služby, v ktorej budeme v komunikačnom scenári využívať desktopovú aplikáciu typu winforms. Pri overovaní klientskych certifikátov desktopovej aplikácie nie je nutné použitie podsystému. Celý proces overovania klientskeho certifikátu webovou službou má tieto kroky:
 
 
Doteraz sme sa zaoberali prípadom, v ktorom konzumentom XML ASP.NET webovej služby bola webová aplikácia, napríklad ASP.NET stránka. V tejto práci budeme neskôr vyvíjať vlastnú bezpečnostnú platformu pre XML ASP.NET webové služby, ktorej služby bude využívať desktopová aplikáciu typu winforms. Pri overovaný klientskych certifikátov desktopovej aplikácie nie je nutné použitie podsystému. Celý proces overovania klientskeho certifikátu webovou službou spočíva:
 
  
 
1. Desktopová aplikácia načíta príslušný klientsky certifikát z úložiska certifikátov.
 
1. Desktopová aplikácia načíta príslušný klientsky certifikát z úložiska certifikátov.
Riadok 307: Riadok 286:
 
3. Cez HTTPS kanál pošle SOAP požiadavku na XML webovú službu.
 
3. Cez HTTPS kanál pošle SOAP požiadavku na XML webovú službu.
  
4. Klientsky certifikát, na strane webovej služby môže byť overený dvoma spôsobmi <nowiki>[</nowiki>15<nowiki>]</nowiki>:
+
4. Klientsky certifikát na strane webovej služby môže byť overený dvoma spôsobmi <nowiki>[</nowiki>15<nowiki>]</nowiki>:
 +
 
 +
* webovým serverom,
 +
* priamo v programovom kóde webovej služby ASP.NET.
  
* Webovým serverom,
 
* Priamo v programovom kóde webovej služby ASP.NET.
 
  
 
[[Súbor:dp_2010_jm_10.png||framed|center|Obr. 5.4 Overenie klientskeho certifikátu desktopovej aplikácie XML ASP.NET webovou službou]]
 
[[Súbor:dp_2010_jm_10.png||framed|center|Obr. 5.4 Overenie klientskeho certifikátu desktopovej aplikácie XML ASP.NET webovou službou]]

Aktuálna revízia z 14:08, 11. jún 2010

Autentifikácia

Autentifikácia predstavuje kľúčovú úlohu pri vytváraní bezpečnej komunikácie medzi klientom a webovou službou. Od identity klienta sa odvíja celý scenár komunikácie, preto sa samotnému overovaniu klientov budeme venovať podrobnejšie. Overovanie predstavuje proces, v ktorom sa zisťuje identita užívateľa a zabezpečuje sa jej platnosť. V aplikáciách ASP.NET ju môžeme implementovať pomocou jedného z týchto štyroch systémov [1], [4]:

1. Formulárová autentifikácia. Tento typ overovania je založený na prihlasovacej stránke a existujúcej databáze užívateľov. Užívateľ dostane lístok, ktorý je kombináciou zakryptovaných hodnôt uložených v cookies. Pre webové služby nie je tento typ vhodný, kedže webové služby sú bezstavové a použitie cookies by ich zbytočne obmedzovalo.

2. Passportová autentifikácia. Využíva infraštruktúru Microsoft Passport. Ten implementuje centrálnu správu identít. Prihlasovacie údaje užívateľov sú spracúvané samostatným passportovým serverom. Tento spôsob overovania je neflexibilný a v tejto práci sa mu podrobnejšie nebudeme venovať.

3. Integrovaná autentifikácia Windows.

4. Autentifikácia založená na certifikácii.

5. Vlastný typ autentifikačného procesu.

Posledné tri spôsoby overovania klientskych aplikácií si rozoberieme v samostatných podkapitolách, nakoľko sú vhodné pre autentifikáciu klientov webových služieb. Vysvetlíme si princípy, na ktorých sú založené a oblasti, v ktorých sú nasadzované. Spomenieme výhody a nevýhody, ktoré so sebou prinášajú. A tak isto uvedieme ich programovú realizáciu v jazyku C .


Windows Autentifikácia

V tejto časti sa venujeme bezpečnosti webových služieb ASP.NET. Technológia Windows autentifikácie je úzko spojená s firmou Microsoft a tak isto operačnými systémami Windows od tejto spoločnosti. Jednou z najjednoduchších možností autentifikácie klientov webových služieb je ponechať túto autentifikáciu na webový server, napríklad ISS, respektíve na samotný operačný systém Windows. Princíp tohto typu autentifikácie je nasledovný [1]:

1. Webový server požiada klientsku aplikáciu o autentifikáciu.

2. Tá predloží prihlasovacie údaje.

3. Tie sú následne namapované na užívateľský účet Windows.

Táto metóda overovania užívateľov je vhodná, ak našu webovú službu využíva menší a stabilný počet užívateľov, ktorí majú existujúce užívateľské účty Windows. Tento typ sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Medzi výhody patrí [1], [4], [7]:

  • Využitie existujúcich účtov Windows.
  • Využitie samotného zabezpečenia operačného systému Windows a impersonácie. Môžeme využiť už existujúce oprávnenie užívateľských účtov, napríklad pre prístup k súborom. Programový kód ASP.NET je vykonávaný pod fixným účtom, pre službu IIS 5.x je to účet ASP.NET a pre IIS 6.0 je to účet Network Service. Použitie pevného účtu má veľa dôvodov. Skoro vo všetkých prípadoch sú práva pridelené užívateľom oveľa menšie ako sú práva potrebné pre aplikáciu. Existuje mechanizmus, pomocou ktorého je možné spúšťať programový kód pod prevzatou identitou. Ide o tzv. impersonáciu. Takýto model je vhodné použiť pre lokálne siete s malým počtom užívateľov, ktorí majú korektne zadefinované užívateľské oprávnenie Windows. Impersonácia bude vysvetlená v podkapitole 5.2.1.
  • Pri tomto type nie je nutné vytvárať prihlasovaciu stránku ani databázu užívateľov, čiže táto metóda nie je z programátorského hľadiska časovo náročná.

Existuje však veľa dôvodov, prečo sa tomuto spôsobu overovania vyhnúť. Napríklad [7], [9]:

  • Tento typ autentifikácie nie je veľmi flexibilný a veľmi zle sa prispôsobuje.
  • Dochádza pri ňom k naviazaniu na užívateľské účty.
  • Je nevyhnutné, aby klienti webovej služby mali operačný systém od spoločnosti Microsoft kvôli korektnej autentifikácii webovým serverom IIS.
  • Táto metóda neumožňuje riadiť autentifikačný proces. Predstavuje to veľký problém, pokiaľ má byť webová služba verejná.

Pri Windows autentifikácii je overovanie klienta vykonávané webovým serverom IIS. Ten môže overiť a autorizovať klienta ešte skôr, ako webová aplikácia (napr. webová služba) začne obsluhovať jeho požiadavku. IIS má niekoľko bezpečnostných mechanizmov pomocou ktorých môže overiť, autorizovať klienta, zabezpečiť dôvernosť a integritu komunikácie.


Služba Internet Information Service

Webový server IIS zabezpečuje korektné prostredie pre beh aplikácie typu klient – server.

K autentifikácii klientov má k dispozícii niekoľko stratégií. Môže použiť na overenie klienta [4] :

  • Základnú autentifikáciu. Túto metódu vyvinulo konzorcium W3C. Definuje dodatočnú hlavičku HTTP, v ktorej sú prenášané užívateľské mená a heslá. Dáta nie sú kryptované, ale sú kódované vo formáte Base64. Tento typ je nutné používať s SSL.
  • Digestívnu autentifikáciu. Je podobná základnej autentifikácii, prihlasovacie údaje nie sú prenášané v kódovaní Base64, ale sú hašované. Tento spôsob nie je veľmi rozšírený, našiel uplatnenie len v intranetoch.
  • Integrovanú autentifikáciu Windows. Pri tomto type autentifikácie je overovanie užívateľa ponechané na samotný operačný systém. Využíva sa 96 bitové číslo SID (Secure identifier), ktoré slúži na identifikáciu každého prihláseného užívateľa. Identita každého prihláseného užívateľa sa predáva vo forme tokenu. Pretože integrovaná autentifikácia Windows je najvhodnejším overovacím štandardom pre intranetové aplikácie založené na WAN alebo LAN, budeme sa jej venovať v nasledujúcej podkapitole.


Integrovaná autentifikácia Windows

Podmienkou korektného fungovania tohto typu overovania užívateľov je to, že klient aj webový server sa musia nachádzať na rovnakej lokálnej sieti. Pri tejto metóde sa neprenášajú mená a heslá užívateľov, ale spolupracuje s doménovým serverom alebo inštanciou Active Directory. [1] Na prenos prihlasovacích údajov sa využíva autentifikačný protokol NTLM (NT LAN Manager) alebo protokol Kerberos 5. Druh overovacieho protokolu závisí od operačného systému klienta a serveru. Pokiaľ ide o operačný systém Windows 2000 a vyšší ako autentifikačný protokol je použitý Kerberos 5, inak bude overovanie realizované prostredníctvom NTLM. [4]

V tejto podkapitole si rozoberieme nasledujúce schémy integrovaného overovania Windows [9]:

  • Integrované overenie systému Windows s impersonáciou.
  • Integrované overenie systému Windows bez impersonácie.
  • Integrované overenie systému Windows s preddefinovanou identitou.

Ale skôr ako sa začneme venovať samotnej integrovanej autentifikácii systému Windows, je vhodné si objasniť proces impersonácie.


Impersonácia

Impersonácia je proces vykonávania programového kódu v kontexte identity iného užívateľa. Ako už bolo spomenuté, kód webovej služby ASP.NET beží pod fixným účtom, typ účtu závisí od verzie služby IIS. Dôvody použitia impersonácie sú nasledovné [1], [4]:

  • Zvýšenie flexibility systému. Pre každého užívateľa môžeme prideliť rôzne prístupové práva a vyhneme sa tým použitiu fixného účtu pre všetkých užívateľov.
  • Rozlíšenie práv pre jednotlivé webové aplikácie na rovnakom počítači. V situácii, keď webový server používa veľké množstvo personalizovaných adresárov, môžeme pomocou impersonácie zabrániť, aby aplikácia nesprístupnila užívateľovi iné adresáre ako tie, na ktoré má oprávnenie.

ASP.NET podporuje dva typy impersonácie [15]:

  • Konfiguračnú, prostredníctvom konfiguračného súboru web.config webovej služby.
  • Programovú, ktorá umožňuje prepnutie identity v rámci programu.


Konfiguračná impersonácia

Predstavuje najjednoduchšiu formu impersonácie prostredníctvom nadefinovania v konfiguračnom súbore web.config pomocou prvku <identity>, ktorého hodnotu nastavíme na true. [1]

Tab. 5.1 Konfiguračné nastavenie impersonácie v súbore web.config
<configuration>
   <system.web>
      <identity impersonate="true"/>
   </system.web>
</configuration>

ASP.NET umožňuje pevné nastavenie identity, pod ktorou bude spúšťaný kód webovej služby.

Tab. 5.2 Konfiguračné nastavenie impersonácie s predefinovaným účtom
    <identity impersonate="true" userName="USER" password="PASSWORD" />


Programová impersonácia

V tejto podkapitole si vysvetlíme programovú impersonáciu s využitím platformy .NET Framework. Umožňuje väčšiu kontrolu nad procesom. Pre programovú impersonáciu sa využíva metóda WindowsIdentity.Impersonate(), ktorá je súčasťou menného priestoru System.Security.Principal. [9]

Pomocou tejto metódy môžeme nastaviť impersonáciu pre špecifický účet, ktorý je určený príznakom účtu (account token). Postup pri programovej impersonácii je nasledovný [1] :

1. Najskôr získame príznak účtu Windows, ktorý chceme zosobniť.

2. Pomocou metódy WindowsIdentity.Impersonate() spustíme proces impersonácie. Návratová hodnota tejto metódy je objekt WindowsImpersonationContext.

3. Návrat k pôvodnej identite dosiahneme zavolaním metódy Undo() objektu WindowsImpersonationContext.

Príznaky užívateľských účtov sú v platforme .NET reprezentované pomocou objektu IntPtr. Tento objekt reprezentuje ukazovatele do oblasti neriadenej pamäte.

Získanie príznaku účtu aktuálneho prihláseného užívateľa je Tab. 5.3.

Tab. 5.3 Získanie príznaku účtu Windows
IntPtr token = ((WindowsIdentity)User.Identity).Token;

Samotná impersonácia pomocou príznaku účtu s využitím metódy Impersonate() je v Tab. 5.4.

Tab. 5.4 Proces impersonácie s využitím metódy Impersonate()
WindowsImpersonationContext impersonationContext;
impersonationContext = WindowsIdentity.Impersonate(token);


Integrované overenie službou Windows s impersonáciou

Spôsoby realizácie impersonácie sme si vysvetlili v kapitole 5.2.1 Pre korektné využitie tohto typu overovania klientskych aplikácií je nutné zadeklarovať ten typ autentifikácie v konfiguračnom súbore webovej služby web.config prostredníctvom prvku <authentication mode>, ktorý nastavíme na typ Windows. Samotnú impersonáciu povolíme prostredníctvom prvku <identity impersonate> , ktorý nastavíme na hodnotu true. [1], [4]

Tab. 5.5 Nastavenie integrovanej autentifikácie Windows s impersonáciou v súbore web.config
<configuration>
   <system.web>
      <authentication mode="Windows"/>
      <identity impersonate="true"/>
   </system.web>
</configuration>


Táto konfigurácia zosobní kód webovej služby ASP.NET užívateľa, ktorý bol overený službou IIS. Pre zosobnenie kódu webovej služby je nutné zakázať anonymný prístup v službe IIS. Ak je v službe IIS povolený anonymný prístup, kód ASP.NET bude spustený pod účtom hosťa v Internete, implicitne účet IUSER_POČÍTAČ.

Pri tomto spôsobe autentifikácie máme tieto možnosti na autorizáciu klienta [1]:

  • Zoznamy ACL (Access control list). Prostredníctvom nich môžeme obmedziť prístup k súborom webovej služby a prostriedkom, ktoré využíva.
  • Autorizácia prostredníctvom adresy URL, ktorá sa realizuje konfiguračne v súbore web.config webovej služby alebo v súbore machine.confing.

Tento typ integrovaného overovania Windows je vhodné pre webové služby použiť v nasledujúcich situáciách [4]:

  • Pokiaľ majú byť užívatelia webovej služby overovaní na základe existujúcich účtov Windows.
  • Ak má byť kontext zabezpečenia spúšťajúceho užívateľa webovou službou poslaný do ďalšej vrstvy.


Integrované overenie systému Windows bez impersonácie

Tento model overovania je po stránke konfiguračného zabezpečenia totožný s integrovaným overovaním Windows s impersonáciou. Jediný rozdiel je v tom, že v konfiguračnom súbore webovej služby web.config je prvok <identity impersonate> nastavený na hodnotu false. [3]

Tab. 5.6 Nastavenie integrovanej autentifikácie Windows bez impersonácie v súbore web.config
<configuration>
   <system.web>
      <authentication mode="Windows"/>
      <identity impersonate="false"/>
   </system.web>
</configuration>

Možnosti autorizácie a scenáre nasadenia tohto modelu sú rovnaké ako v predchádzajúcej kapitole Integrované overenie službou Windows s impersonáciou, preto ich neuvádzame.

Integrované overenie systému Windows s preddefinovanou identitou

Použitie pevnej identity pre proces ASP.NET nie je veľmi vhodné a zaužívané riešenie. Nakoľko implicitne je proces ASP.NET spúšťaný pod fixným účtom, ktorý je dobre zabezpečený, jeho typ záleží od verzie služby IIS. Pokiaľ by sme chceli spúšťať proces ASP.NET pod naším preddefinovaným fixným účtom, museli by sme mu zadefinovať veľmi silné oprávnenia. Pri zlej konfigurácii účtu to môže predstavovať veľmi silné bezpečnostné riziko. [1], [2]

Takisto ako v predchádzajúcich dvoch schémach integrovaného overovania Windows, sa aj tento typ overovania realizuje konfiguračne v súbore web.config webovej služby, kde sa hodnota prvku <identity impersonate> nastaví na hodnotu true a v samotnom prvku uvedieme užívateľské meno a heslo účtu. Z dôvodu zvýšenia bezpečnosti môžeme využiť nástroj aspnet_setreg.exe na zakryptovanie prihlasovacích informácií. [9], [29]

Samotná konfigurácia integrovaného overovania Windows s preddefinovaným pevným účtom je v Tab. 5.7.


Tab. 5.7 Nastavenie integrovanej autentifikácie Windows s preddefinovanou identitou v súbore web.config
<configuration>
  <system.web>
    <authentication mode="Windows"/>
       <identity impersonate="true"
       userName="registry:HKLM\Software\AspNetIdentity,Name"
       password="registry:HKLM\Software\AspNetIdentity,Pwd"/>
  </system.web>
</configuration>

V tejto kapitole sme sa venovali autentifikácii Windows. Tento model overovania sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Podrobnejšie sme sa venovali integrovanej autentifikácii Windows, nakoľko predstavuje štandard pre intranetové aplikácie založené na WAN alebo LAN sieťach. Z toho dôvodu je využívaná v malých podnikových sieťach. [4]


Autentifikácia založená na certifikátoch

Samotný princíp a fungovanie certifikátov sme si vysvetlili v podkapitole 4.1.1. Overovanie klientskych certifikátov môžeme vo webovej službe využiť na overovanie:

  • klientskych a serverových aplikácií volajúcich webovú službu,
  • iných webových služieb.

Existujú niektoré obmedzenia, s ktorými sa môžeme stretnúť pri overovaní klientskych aplikácií prostredníctvom certifikátov, v tejto kapitole sa pokúsime niektoré z nich načrtnúť a takisto ponúknuť aj riešenie.


Proces autentifikácie klientskych certifikátov

Problém vzniká, ak klient komunikuje s webovou službou prostredníctvom webovej aplikácie. Webová aplikácia môže overiť klientsky certifikát, ale ten istý certifikát nie je možné použiť na overenie webovou službou. Webová aplikácia nemôže poskytnúť klientsky certifikát spúšťajúceho užívateľa do webovej službe. Dôvod je nasledovný: webová aplikácia nemá prístup k súkromnému kľúču klienta. [16]


Obr. 5.1 Problém overovania klientskych certifikátov webovou službou

Proces autentifikácie klientskeho certifikátu prostredníctvom podsystému

V tejto podkapitole sa oboznámime s riešením problému, ktorý sme si načrtli v podkapitole Proces autentifikácie klientskych certifikátov. Riešenie nášho problému môže byť odstránené nasledujúcim komunikačným scenárom [16]:

1. Klient volá webovú službu prostredníctvom webovej aplikácie.

2. Aplikácia plní úlohu autentifikácie a autorizácie klienta a je zodpovedná za svojich klientov.

3. Po úspešnom overení na základe existencie členstva klienta v nejakej roli webová aplikácia môže volať webovú službu prostredníctvom rôznych certifikátov. Tým je zabezpečená existencia viacerých užívateľských rolí vo webovej službe.

4. Webová služba autorizuje webovú aplikáciu na základe certifikátu, ktorý od nej dostala.

Dôvernosť a integrita komunikácie medzi serverom webovej aplikácie a webovou službou je zabezpečená použitím protokolu SSL alebo IPSec. Prostredníctvom certifikátov je ošetrený neautorizovaný prístup. Celý komunikačný scenár je znázornený na Obr. 5.2.


Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému

Implementácia overovanie klientov webovou službou prostredníctvom podsystému na platforme .NET Framework s využitím serverovej aplikácie

Z dôvodu, že webová aplikácia ASP.NET nemá priamy prístup k certifikátom, musíme použiť dodatočný proces, ktorý zabezpečí volanie webovej služby a predanie samotných certifikátov službe. Proces musí byť nakonfigurovaný tak, aby bol spúšťaný s pridruženým užívateľským profilom, pretože ASP.NET aplikácia nemá načítaný príslušný užívateľský proces a k nemu zodpovedajúce úložisko certifikátov. Tento scenár môžeme realizovať prostredníctvom [16]:

  • služby systému Windows,
  • serverovej aplikácie (Model Enterprise Services).

Celý proces overovania s využitím serverovej aplikácie sa skladá z nasledujúcich krokov [15], [16]:

1. ASP.NET aplikácia autentifikuje volajúcich klientov na základe ich certifikátov.

2. Webová aplikácia ASP.NET autorizuje prístup klientov k webovej službe.

3. ASP.NET aplikácia volá príslušný serverový komponent (ten je spúšťaný iba v serverovom procese).

4. Serverová aplikácia je spúšťaná pod konkrétnym účtom. K nemu je pridružený užívateľský profil. Serverový komponent načíta certifikát z úložiska certifikátov. Ten je použitý webovou službou na overenie webovej aplikácie.

5. Serverový komponent volá webovú službu ASP.NET a predáva jej klientsky certifikát.

Celý proces overovania certifikátov s využitím serverového komponentu je znázornený na Obr. 5.3.


Obr. 5.3 Overovanie klientov webovou službou s využitím serverovej aplikácie [16]

Takýto scenár server / server funguje za predpokladu, že webová aplikácia správne autentifikovala a autorizovala klienta. Použitie dodatočného procesu na prístup k certifikátom je nutný z toho dôvodu, že účet ASP.NET nemá prístup k žiadnemu certifikátu na webovom serveri. Každý certifikát je spracovávaný v rámci užívateľského profilu s pridruženým účtom.

Overovanie desktopových aplikácií prostredníctvom klientskych certifikátov webovou službou

Doteraz sme sa zaoberali prípadom, v ktorom konzumentom XML ASP.NET webovej služby bola webová aplikácia, napríklad ASP.NET stránka. V tejto práci budeme neskôr vyvíjať vlastnú bezpečnostnú platformu pre XML ASP.NET webové služby, v ktorej budeme v komunikačnom scenári využívať desktopovú aplikáciu typu winforms. Pri overovaní klientskych certifikátov desktopovej aplikácie nie je nutné použitie podsystému. Celý proces overovania klientskeho certifikátu webovou službou má tieto kroky:

1. Desktopová aplikácia načíta príslušný klientsky certifikát z úložiska certifikátov.

2. Aplikácia winforms pripojí klientsky certifikát k vlastnosti ClientCertificates triedy proxy, ktorej význam sme si vysvetlili v kapitole Trieda proxy.

3. Cez HTTPS kanál pošle SOAP požiadavku na XML webovú službu.

4. Klientsky certifikát na strane webovej služby môže byť overený dvoma spôsobmi [15]:

  • webovým serverom,
  • priamo v programovom kóde webovej služby ASP.NET.


Obr. 5.4 Overenie klientskeho certifikátu desktopovej aplikácie XML ASP.NET webovou službou