Sdílet prostřednictvím


Zabezpečení služeb

Zabezpečení služby WCF (Windows Communication Foundation) se skládá ze dvou primárních požadavků: zabezpečení přenosu a autorizace. (Třetí požadavek, auditování událostí zabezpečení, je popsáno v tématu Auditování.) Stručně řečeno, zabezpečení přenosu zahrnuje ověřování (ověření identity služby i klienta), důvěrnost (šifrování zpráv) a integritu (digitální podepisování pro detekci manipulace). Autorizace je řízení přístupu k prostředkům, například umožňuje jen privilegovaným uživatelům číst soubor. Pomocí funkcí WCF jsou dva primární požadavky snadno implementovány.

S výjimkou BasicHttpBinding třídy (nebo <elementu basicHttpBinding> v konfiguraci) je zabezpečení přenosu ve výchozím nastavení povoleno pro všechny předdefinované vazby. Témata v této části se týkají dvou základních scénářů: implementace zabezpečení přenosu a autorizace v intranetové službě hostované ve službě Internetová informační služba (IIS) a implementaci zabezpečení a autorizace přenosu ve službě hostované ve službě IIS.

Základy zabezpečení

Zabezpečení spoléhá na přihlašovací údaje. Přihlašovací údaje ukazují, že entita je tím, za koho se tvrdí. (Entita může být osoba, softwarový proces, společnost nebo cokoli, co je možné autorizovat.) Klient služby například vytvoří deklaraciidentity a přihlašovací údaje nějakým způsobem potvrdí tuto deklaraci identity. V typickém scénáři dojde k výměně přihlašovacích údajů. Nejprve služba vytvoří deklaraci identity a prokáže ji klientovi pomocí přihlašovacích údajů. Klient naopak vytvoří deklaraci identity a předá službě přihlašovací údaje. Pokud obě strany důvěřují přihlašovacím údajům druhého, je možné vytvořit zabezpečený kontext, ve kterém se všechny zprávy vyměňují v důvěrnosti a všechny zprávy jsou podepsány za účelem ochrany jejich integrity. Jakmile služba vytvoří identitu klienta, může se shodovat s deklaracemi identity v přihlašovacích údajích s rolí nebo členstvím ve skupině. V obou případech pomocí role nebo skupiny, do které klient patří, služba autorizuje klienta k provádění omezené sady operací na základě oprávnění role nebo skupiny.

mechanismy Zabezpečení Windows

Pokud jsou klient i počítač služby v doméně Systému Windows, která vyžaduje, aby se obě počítače přihlásily k síti, poskytují se přihlašovací údaje infrastrukturou Systému Windows. V takovém případě se přihlašovací údaje vytvoří, když se uživatel počítače přihlásí k síti. Každý uživatel a každý počítač v síti musí být ověřen jako patřící důvěryhodné sadě uživatelů a počítačů. Každý takový uživatel a počítač se v systému Windows označuje také jako objekt zabezpečení.

V doméně Windows založené na kontroleru Kerberos používá kontroler Kerberos schéma založené na udělování lístků každému objektu zabezpečení. Lístky, které kontroler uděluje, důvěřují ostatním grantům lístků v systému. Pokaždé, když se entita pokusí provést nějakou operaci nebo získat přístup k prostředku (například k souboru nebo adresáři na počítači), lístek se prověří za jeho platnost a pokud projde, získá objekt zabezpečení pro operaci jiný lístek. Tato metoda udělování lístků je efektivnější než alternativa k ověření objektu zabezpečení pro každou operaci.

Starší, méně zabezpečený mechanismus používaný v doménách Systému Windows je NT LAN Manager (NTLM). V případech, kdy se protokol Kerberos nedá použít (obvykle mimo doménu Systému Windows, například v pracovní skupině), lze jako alternativu použít protokol NTLM. NtLM je také k dispozici jako možnost zabezpečení pro službu IIS.

Autorizace v systému Windows funguje tak, že každému počítači a uživateli přiřadí sadu rolí a skupin. Například každý počítač s Windows musí být nastaven a řízen osobou (nebo skupinou lidí) v roli správce. Další rolí je uživatel, který má mnohem omezenější sadu oprávnění. Kromě této role se uživatelé přiřazují ke skupinám. Skupina umožňuje více uživatelům provádět ve stejné roli. V praxi se proto počítač s Windows spravuje přiřazením uživatelů ke skupinám. Skupině uživatelů počítače je například možné přiřadit několik uživatelů a k skupině správců je možné přiřadit mnohem omezenější sadu uživatelů. Na místním počítači může správce také vytvářet nové skupiny a přiřazovat k této skupině další uživatele (nebo i jiné skupiny).

Na počítači se systémem Windows je možné chránit všechny složky v adresáři. To znamená, že můžete vybrat složku a určit, kdo má přístup k souborům, a to, jestli soubor může kopírovat, nebo (v nejprivilegovanějším případě) změnit soubor, odstranit soubor nebo přidat soubory do složky. To se označuje jako řízení přístupu a mechanismus pro něj se označuje jako seznam řízení přístupu (ACL). Při vytváření seznamu ACL můžete přiřadit přístupová oprávnění k libovolné skupině nebo skupinám a také jednotlivým členům domény.

Infrastruktura WCF je navržená tak, aby používala tyto mechanismy zabezpečení Systému Windows. Proto pokud vytváříte službu nasazenou v intranetu a jejíž klienti jsou omezeni na členy domény Windows, zabezpečení se snadno implementuje. K doméně se můžou přihlásit jenom platné uživatele. Po přihlášení uživatelů kontroler Kerberos umožňuje každému uživateli vytvořit zabezpečené kontexty s jakýmkoli jiným počítačem nebo aplikací. Na místním počítači je možné skupiny snadno vytvořit a při ochraně konkrétních složek je možné tyto skupiny použít k přiřazení přístupových oprávnění k počítači.

Implementace Zabezpečení Windows v intranetových službách

Pokud chcete zabezpečit aplikaci, která běží výhradně v doméně Windows, můžete použít výchozí nastavení WSHttpBinding zabezpečení vazby nebo vazby NetTcpBinding . Ve výchozím nastavení má kdokoli ve stejné doméně Windows přístup ke službám WCF. Vzhledem k tomu, že se tito uživatelé přihlásili k síti, jsou důvěryhodní. Zprávy mezi službou a klientem jsou šifrované kvůli důvěrnosti a podepsání integrity. Další informace o tom, jak vytvořit službu, která používá zabezpečení systému Windows, naleznete v tématu Postupy: Zabezpečení služby pomocí přihlašovacích údajů systému Windows.

Autorizace pomocí třídy PrincipalPermissionAttribute

Pokud potřebujete omezit přístup k prostředkům v počítači, nejjednodušší způsob je použít PrincipalPermissionAttribute třídu. Tento atribut umožňuje omezit vyvolání operací služby tím, že vyžaduje, aby byl uživatel v zadané skupině nebo roli systému Windows nebo aby byl konkrétním uživatelem. Další informace naleznete v tématu Postupy: Omezení přístupu pomocí třídy PrincipalPermissionAttribute.

Zosobnění

Zosobnění je další mechanismus, který můžete použít k řízení přístupu k prostředkům. Ve výchozím nastavení se služba hostovaná službou IIS spustí pod identitou účtu ASPNET. Účet ASPNET má přístup pouze k prostředkům, pro které má oprávnění. Je však možné nastavit seznam ACL pro složku tak, aby vyloučil účet služby ASPNET, ale povolit určitým jiným identitám přístup ke složce. Otázka se pak stane, jak těmto uživatelům umožnit přístup ke složce, pokud k tomu účet ASPNET není povolený. Odpovědí je použití zosobnění, kdy je službě povoleno používat přihlašovací údaje klienta pro přístup k určitému prostředku. Dalším příkladem je přístup k databázi SQL Serveru, ke které mají oprávnění jenom někteří uživatelé. Další informace o použití zosobnění najdete v tématu Postupy: Zosobnění klienta ve službě a delegování a zosobnění.

Zabezpečení na internetu

Zabezpečení na internetu se skládá ze stejných požadavků jako zabezpečení v intranetu. Služba musí předložit své přihlašovací údaje, aby prokázala jeho pravost, a klienti musí prokázat svou identitu této službě. Jakmile je identita klienta ověřená, může služba řídit, kolik přístupu má klient k prostředkům. Vzhledem k heterogenní povaze internetu se však přihlašovací údaje zobrazené liší od přihlašovacích údajů používaných v doméně Windows. Zatímco kontroler Kerberos zpracovává ověřování uživatelů v doméně s lístky přihlašovacích údajů, na internetu, službách a klientech spoléhá na libovolný z několika různých způsobů prezentace přihlašovacích údajů. Cílem tohoto tématu je však prezentovat běžný přístup, který umožňuje vytvořit službu WCF, která je přístupná na internetu.

Použití služby IIS a ASP.NET

Požadavky na zabezpečení internetu a mechanismy pro řešení těchto problémů nejsou nové. SLUŽBA IIS je webový server společnosti Microsoft pro internet a má mnoho funkcí zabezpečení, které tyto problémy řeší; kromě toho ASP.NET zahrnuje funkce zabezpečení, které mohou služby WCF používat. Pokud chcete využívat tyto funkce zabezpečení, hostujte službu WCF ve službě IIS.

Použití ASP.NET zprostředkovatelů členství a rolí

ASP.NET zahrnuje členství a poskytovatele rolí. Zprostředkovatel je databáze párů uživatelských jmen a hesel pro ověřování volajících, která také umožňuje určit přístupová oprávnění jednotlivých volajících. Pomocí WCF můžete prostřednictvím konfigurace snadno použít existujícího zprostředkovatele členství a role. Ukázkovou aplikaci, která to demonstruje, najdete v ukázce členství a zprostředkovatele rolí.

Přihlašovací údaje používané službou IIS

Na rozdíl od domény Systému Windows zálohované řadičem Kerberos je internet prostředí bez jediného kontroleru pro správu milionů uživatelů, kteří se přihlašují kdykoli. Místo toho jsou přihlašovací údaje na internetu nejčastěji ve formě certifikátů X.509 (označovaných také jako Secure Sockets Layer nebo SSL). Tyto certifikáty obvykle vydává certifikační autorita, což může být společnost třetí strany, která vyhodí pravost certifikátu a osobě, které jí byla vydána. Pokud chcete službu zveřejnit na internetu, musíte k ověření služby zadat také takový důvěryhodný certifikát.

V tomto okamžiku vyvstává otázka, jak takový certifikát získáte? Jedním z přístupů je přejít na certifikační autoritu třetí strany, jako je Authenticode nebo VeriSign, až budete připraveni službu nasadit a zakoupit certifikát pro vaši službu. Pokud jste však ve vývojové fázi s WCF a ještě nejste připraveni k potvrzení nákupu certifikátu, nástroje a techniky existují pro vytváření certifikátů X.509, které můžete použít k simulaci produkčního nasazení. Další informace naleznete v tématu Práce s certifikáty.

Režimy zabezpečení

Programování zabezpečení WCF zahrnuje několik důležitých rozhodovacích bodů. Jedním z nejzásadnějších je volba režimu zabezpečení. Mezi dva hlavní režimy zabezpečení patří režim přenosu a režim zpráv.

Třetí režim, který kombinuje sémantiku obou hlavních režimů, je přenos s režimem přihlašovacích údajů zprávy.

Režim zabezpečení určuje, jak jsou zprávy zabezpečené, a každá volba má výhody a nevýhody, jak je vysvětleno níže. Další informace o nastavení režimu zabezpečení naleznete v tématu Postupy: Nastavení režimu zabezpečení.

Režim přenosu

Mezi sítí a aplikací existuje několik vrstev. Jednou z těchto možností je přenosová vrstva*, která spravuje přenos zpráv mezi koncovými body. Pro stávající účel je nutné, abyste pochopili, že WCF používá několik přenosových protokolů, z nichž každý může zabezpečit přenos zpráv. (Další informace o dopravách najdete v tématu Přenosy.)

Běžně používaný protokol je HTTP; další je TCP. Každý z těchto protokolů může zabezpečit přenos zpráv mechanismem (nebo mechanismy) konkrétním protokolem. Například protokol HTTP je zabezpečený pomocí protokolu SSL přes HTTP, který se často zkracuje jako HTTPS. Když tedy vyberete režim přenosu pro zabezpečení, rozhodnete se použít mechanismus, který určuje protokol. Pokud například vyberete WSHttpBinding třídu a nastavíte její režim zabezpečení na Transport, jako mechanismus zabezpečení vyberete SSL přes HTTP (HTTPS). Výhodou přenosového režimu je, že je efektivnější než režim zpráv, protože zabezpečení je integrováno na poměrně nízké úrovni. Při použití přenosového režimu musí být bezpečnostní mechanismus implementován podle specifikace přenosu, a proto zprávy mohou bezpečně proudit pouze z bodu do bodu přes přenos.

Režim zpráv

Naproti tomu režim zpráv poskytuje zabezpečení zahrnutím dat zabezpečení do každé zprávy. Pomocí hlaviček zabezpečení XML a SOAP jsou přihlašovací údaje a další data potřebná k zajištění integrity a důvěrnosti zprávy zahrnuty do každé zprávy. Každá zpráva obsahuje data o zabezpečení, takže výsledkem je výkon, protože každá zpráva musí být zpracována jednotlivě. (V režimu přenosu, jakmile je transportní vrstva zabezpečena, všechny zprávy volně proudí.) Zabezpečení zpráv má ale jednu výhodu oproti zabezpečení přenosu: je flexibilnější. To znamená, že požadavky na zabezpečení nejsou určeny přenosem. K zabezpečení zprávy můžete použít libovolný typ přihlašovacích údajů klienta. (V přenosovém režimu transportní protokol určuje typ přihlašovacích údajů klienta, které můžete použít.)

Přenos s přihlašovacími údaji zprávy

Třetí režim kombinuje to nejlepší z hlediska přenosu i zabezpečení zpráv. V tomto režimu se zabezpečení přenosu používá k efektivnímu zajištění důvěrnosti a integrity každé zprávy. Zároveň každá zpráva obsahuje svá data přihlašovacích údajů, která umožňují ověření zprávy. S ověřováním je možné také implementovat autorizaci. Ověřením odesílatele je možné udělit (nebo odepřít) přístup k prostředkům podle identity odesílatele.

Zadání typu přihlašovacích údajů klienta a hodnoty přihlašovacích údajů

Po výběru režimu zabezpečení můžete také zadat typ přihlašovacích údajů klienta. Typ přihlašovacích údajů klienta určuje, jaký typ musí klient použít k ověření na serveru.

Ne všechny scénáře však vyžadují typ přihlašovacích údajů klienta. Pomocí protokolu SSL přes HTTP (HTTPS) se služba ověřuje vůči klientovi. V rámci tohoto ověřování se certifikát služby odešle klientovi v procesu označovaného jako vyjednávání. Přenos zabezpečený protokolem SSL zajišťuje, že všechny zprávy jsou důvěrné.

Pokud vytváříte službu, která vyžaduje ověření klienta, závisí váš výběr typu přihlašovacích údajů klienta na přenosu a vybraném režimu. Například použití přenosu HTTP a volba režimu přenosu vám dává několik možností, jako je Základní, Digest a další. (Další informace o těchto typech přihlašovacích údajů najdete v tématu Principy ověřování HTTP.)

Pokud vytváříte službu v doméně Windows, která bude k dispozici pouze jiným uživatelům sítě, je nejjednodušší použít typ přihlašovacích údajů klienta systému Windows. Může však být také potřeba poskytnout službu s certifikátem. Toto je znázorněno v článku Postupy: Zadání hodnot přihlašovacích údajů klienta.

Hodnoty přihlašovacích údajů

Hodnota přihlašovacích údajů je skutečné přihlašovací údaje, které služba používá. Jakmile zadáte typ přihlašovacích údajů, možná budete muset službu nakonfigurovat i se skutečnými přihlašovacími údaji. Pokud jste vybrali Windows (a služba se spustí v doméně Windows), nezadáte skutečnou hodnotu přihlašovacích údajů.

Identita

Ve WCF má identita termínu různé významy pro server a klienta. Stručně řečeno, při spuštění služby je identita přiřazena k kontextu zabezpečení po ověření. Chcete-li zobrazit skutečnou ServiceSecurityContext identitu, zkontrolujte WindowsIdentity a PrimaryIdentity vlastnosti třídy. Další informace naleznete v tématu Postupy: Prozkoumání kontextu zabezpečení.

Naproti tomu identita na straně klienta slouží k ověření služby. Vývojář klienta může v době návrhu <nastavit prvek identity> na hodnotu získanou ze služby. V době běhu klient zkontroluje hodnotu elementu proti skutečné identitě služby. Pokud se kontrola nezdaří, klient ukončí komunikaci. Hodnota může být hlavní název uživatele (UPN), pokud služba běží pod identitou konkrétního uživatele nebo hlavním názvem služby (SPN), pokud služba běží pod účtem počítače. Další informace najdete v tématu Identita služby a ověřování. Přihlašovací údaje můžou být také certifikátem nebo polem nalezeným v certifikátu, který certifikát identifikuje.

Úrovně ochrany

Vlastnost ProtectionLevel se vyskytuje u několika tříd atributů (například u ServiceContractAttributeOperationContractAttribute tříd a tříd). Úroveň ochrany je hodnota, která určuje, jestli jsou zprávy (nebo části zpráv) podporující službu podepsané, podepsané a šifrované nebo odeslané bez podpisů nebo šifrování. Další informace o vlastnosti naleznete v tématu Principy úrovně ochrany a pro programovací příklady naleznete v tématu Postupy: Nastavení ProtectionLevel Vlastnost. Další informace o návrhu kontraktu služby s kontextem ProtectionLevel naleznete v tématu Návrh kontraktů služeb.

Viz také