Chování zabezpečení ve WCF
Ve Službě Windows Communication Foundation (WCF) chování mění chování za běhu na úrovni služby nebo na úrovni koncového bodu. (Další informace o chování obecně najdete v tématu Určení chování služby za běhu.) Chování zabezpečení umožňuje kontrolu nad přihlašovacími údaji, ověřováním, autorizací a protokoly auditování. Chování můžete použít buď programováním, nebo prostřednictvím konfigurace.
Tento článek se zaměřuje na konfiguraci následujících chování souvisejících s funkcemi zabezpečení:
- <serviceCredentials>
- <clientCredentials>
- <serviceAuthorization>
- <serviceSecurityAudit>
- <serviceMetadata>, která umožňuje také zadat zabezpečený koncový bod, ke kterému mají klienti přístup k metadatům
Nastavení přihlašovacích údajů pomocí chování
<Pomocí serviceCredentials> a <clientCredentials nastavte hodnoty přihlašovacích> údajů pro službu nebo klienta. Základní konfigurace vazby určuje, jestli je nutné nastavit přihlašovací údaje. Pokud je například režim zabezpečení nastavený na None
, klienti i služby se navzájem neověřují a nevyžadují žádné přihlašovací údaje žádného typu.
Na druhou stranu může vazba služby vyžadovat typ přihlašovacích údajů klienta. V takovém případě možná budete muset nastavit hodnotu přihlašovacích údajů pomocí chování. (Další informace o možných typech přihlašovacích údajů najdete v tématu Výběr typu přihlašovacích údajů.) V některých případech, například při ověřování přihlašovacích údajů systému Windows, prostředí automaticky vytvoří skutečnou hodnotu přihlašovacích údajů a není nutné explicitně nastavit hodnotu přihlašovacích údajů (pokud nechcete zadat jinou sadu přihlašovacích údajů).
Všechny přihlašovací údaje služby jsou nalezeny jako podřízené prvky službyBehaviors>.< Následující příklad ukazuje certifikát použitý jako přihlašovací údaje služby.
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior1">
<serviceCredentials>
<serviceCertificate findValue="000000000000000000000000000"
storeLocation="CurrentUser"
storeName="Root" x509FindType="FindByThumbprint" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Přihlašovací údaje služby
ServiceCredentials ><obsahuje čtyři podřízené prvky. Prvky a jejich použití jsou popsány v následujících částech.
<serviceCertificate> – element
Tento element použijte k určení certifikátu X.509, který slouží k ověření služby klientům pomocí režimu zabezpečení zprávy. Pokud používáte certifikát, který se pravidelně obnovuje, změní se jeho kryptografický otisk. V takovém případě použijte název subjektu jako X509FindType
název, protože certifikát lze znovu použít se stejným názvem subjektu.
Další informace o použití elementu naleznete v tématu Postupy: Určení hodnot přihlašovacích údajů klienta.
<certificate> of <clientCertificate> – element
<Element certifikátu> použijte, pokud služba musí mít certifikát klienta předem, aby bylo možné bezpečně komunikovat s klientem. K tomu dochází při použití duplexního komunikačního vzoru. V typickém vzoru odpovědi na požadavek klient zahrne do požadavku svůj certifikát, který služba používá k zabezpečení odpovědi zpět klientovi. Model duplexní komunikace ale nemá žádné požadavky a odpovědi. Služba nemůže odvodit certifikát klienta z komunikace, a proto služba vyžaduje certifikát klienta předem k zabezpečení zpráv klientovi. Certifikát klienta musíte získat nesměšně a zadat certifikát pomocí tohoto prvku. Další informace o duplexní služby naleznete v tématu Postupy: Vytvoření duplexního kontraktu.
<ověřování> elementu <clientCertificate>
Element <ověřování> umožňuje přizpůsobit způsob ověřování klientů. Atribut můžete nastavit CertificateValidationMode
na None
, ChainTrust
, PeerOrChainTrust
, PeerTrust
, nebo Custom
. Ve výchozím nastavení je úroveň nastavená na ChainTrust
hodnotu , která určuje, že každý certifikát musí být nalezen v hierarchii certifikátů končících kořenovou autoritou v horní části řetězu. Toto je nejbezpečnější režim. Můžete také nastavit hodnotu PeerOrChainTrust
na hodnotu , která určuje, že certifikáty vystavené svým držitelem (vztah důvěryhodnosti) jsou přijímány, stejně jako certifikáty, které jsou v důvěryhodném řetězu. Tato hodnota se používá při vývoji a ladění klientů a služeb, protože certifikáty vydané svým držitelem nemusí být zakoupeny od důvěryhodné autority. Při nasazování klienta použijte ChainTrust
místo toho hodnotu. Můžete také nastavit hodnotu na Custom
hodnotu . Pokud je nastavená hodnota Custom
, musíte také nastavit CustomCertificateValidatorType
atribut na sestavení a typ použitý k ověření certifikátu. Pokud chcete vytvořit vlastní validátor, musíte dědit z abstraktní X509CertificateValidator třídy.
<issuedTokenAuthentication> – element
Scénář vystaveného tokenu má tři fáze. V první fázi se klient, který se pokouší o přístup ke službě, odkazuje na službu tokenů zabezpečení (STS). StS pak ověří klienta a následně vydá token, obvykle token SAML (Security Assertions Markup Language). Klient se pak vrátí do služby pomocí tokenu. Služba zkontroluje token pro data, která službě umožní ověřit token, a proto klient. Aby bylo možné token ověřit, musí být certifikát, který služba zabezpečených tokenů používá, známou službě. Vystavený ElementTokenAuthentication ><je úložiště pro všechny takové certifikáty služby tokenů zabezpečení. Pokud chcete přidat certifikáty, použijte <známé certifikáty>. <Vložte pro každý certifikát přidání>, jak je znázorněno v následujícím příkladu.
<issuedTokenAuthentication>
<knownCertificates>
<add findValue="www.contoso.com"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindBySubjectName" />
</knownCertificates>
</issuedTokenAuthentication>
Ve výchozím nastavení musí být certifikáty získány ze služby zabezpečených tokenů. Tyto "známé" certifikáty zajišťují, aby ke službě měli přístup jenom legitimní klienti.
Měli byste použít povolenou <kolekciAudienceUris> v federované aplikaci, která využívá službu tokenů zabezpečení (STS), která vydává SamlSecurityToken
tokeny zabezpečení. Když služba TOKEN ZABEZPEČENÍ vydá token zabezpečení, může zadat identifikátor URI webových služeb, pro které je token zabezpečení zamýšlen přidáním SamlAudienceRestrictionCondition
tokenu zabezpečení. To umožňuje SamlSecurityTokenAuthenticator
příjemci webové služby ověřit, že vydaný token zabezpečení je určen pro tuto webovou službu zadáním, že tato kontrola by měla proběhnout následujícím způsobem:
audienceUriMode
Nastavte atribut< issuedTokenAuthentication> naAlways
neboBearerKeyOnly
.Zadejte sadu platných identifikátorů URI přidáním identifikátorů URI do této kolekce. Uděláte to tak, že pro každý identifikátor URI vložíte <doplněk> .
Další informace najdete na webu SamlSecurityTokenAuthenticator.
Další informace o použití tohoto konfiguračního prvku naleznete v tématu Postupy: Konfigurace přihlašovacích údajů ve službě FS (Federation Service).
Povolit anonymní uživatele CardSpace
AllowUntrustedRsaIssuers
Nastavení atributu elementu explicitně true
umožňuje každému <IssuedTokenAuthentication>
klientovi prezentovat token podepsaný svým držitelem s libovolným párem klíčů RSA. Vystavitel je nedůvěryhodný , protože klíč nemá přidružená žádná data vystavitele. Uživatel CardSpace může vytvořit samoobslužnou kartu, která obsahuje samoobslužné deklarace identity. Tuto funkci používejte s opatrností. Pokud chcete tuto funkci použít, představte si veřejný klíč RSA jako bezpečnější heslo, které by mělo být uloženo v databázi spolu s uživatelským jménem. Před povolením přístupu klienta ke službě ověřte veřejný klíč RSA prezentovaný klientem tak, že ho porovnáte s uloženým veřejným klíčem pro prezentované uživatelské jméno. Předpokládá se, že jste vytvořili proces registrace, kdy si uživatelé můžou zaregistrovat svá uživatelská jména a přidružit je k veřejným klíčům RSA vydaným svým držitelem.
Přihlašovací údaje klienta
Přihlašovací údaje klienta se používají k ověření klienta ve službách v případech, kdy je vyžadováno vzájemné ověřování. V této části můžete zadat certifikáty služeb pro scénáře, kdy klient musí zabezpečit zprávy službě pomocí certifikátu služby.
Klienta můžete také nakonfigurovat jako součást scénáře federace tak, aby používal vystavené tokeny ze služby zabezpečeného tokenu nebo místního vystavitele tokenů. Další informace o federovaných scénářích najdete v tématu Federace a vystavené tokeny. Všechny přihlašovací údaje klienta se nacházejí v koncovém <boduBehaviors>, jak je znázorněno v následujícím kódu.
<behaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior1">
<clientCredentials>
<clientCertificate findValue="cn=www.contoso.com"
storeLocation="LocalMachine"
storeName="AuthRoot" x509FindType="FindBySubjectName" />
<serviceCertificate>
<defaultCertificate findValue="www.cohowinery.com"
storeLocation="LocalMachine"
storeName="Root" x509FindType="FindByIssuerName" />
<authentication revocationMode="Online"
trustedStoreLocation="LocalMachine" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<clientCertificate> – element
Nastavte certifikát použitý k ověření klienta pomocí tohoto prvku. Další informace naleznete v tématu Postupy: Určení hodnot přihlašovacích údajů klienta.
<httpDigest>
Tato funkce musí být povolena se službou Active Directory ve Windows a Internetová informační služba (IIS). Další informace naleznete v tématu Ověřování hodnotou hash ve službě IIS 6.0.
<issuedToken> – element
VystavenýToken ><obsahuje prvky používané ke konfiguraci místního vystavitele tokenů nebo chování používané se službou tokenů zabezpečení. Pokyny ke konfiguraci klienta pro použití místního vystavitele najdete v tématu Postupy: Konfigurace místního vystavitele.
<localIssuerAddress>
Určuje výchozí adresu služby tokenu zabezpečení. To se používá, pokud WSFederationHttpBinding nezadává adresu URL pro službu tokenů zabezpečení nebo pokud je adresa vystavitele federované vazby http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous
nebo null
. V takových případech musí být nakonfigurovaná adresa místního vystavitele a vazba, ClientCredentials která se má použít ke komunikaci s tímto vystavitelem.
<issuerChannelBehaviors>
<Pomocí issuerChannelBehaviors> přidejte chování klienta WCF používané při komunikaci se službou tokenů zabezpečení. Definujte chování klienta v části endpointBehaviors>.< Chcete-li použít definované chování, přidejte <add>
prvek do elementu <issuerChannelBehaviors>
se dvěma atributy. issuerAddress
Nastavte adresu URL služby tokenu zabezpečení a nastavte behaviorConfiguration
atribut na název definovaného chování koncového bodu, jak je znázorněno v následujícím příkladu.
<clientCredentials>
<issuedToken>
<issuerChannelBehaviors>
<add issuerAddress="http://www.contoso.com"
behaviorConfiguration="clientBehavior1" />
</issuerChannelBehaviors>
</issuedToken>
</clientCredentials>
<serviceCertificate> – element
Tento prvek slouží k řízení ověřování certifikátů služby.
Element <defaultCertificate> může uložit jeden certifikát použitý při zadání žádného certifikátu.
<Použijte oboryCertificates> a <přidejte> k nastavení certifikátů služeb přidružených ke konkrétním službám. Element <add>
obsahuje targetUri
atribut, který se používá k přidružení certifikátu ke službě.
Element <ověřování> určuje úroveň důvěryhodnosti použitou k ověřování certifikátů. Ve výchozím nastavení je úroveň nastavená na "ChainTrust", která určuje, že každý certifikát musí být nalezen v hierarchii certifikátů končících důvěryhodnou certifikační autoritou v horní části řetězce. Toto je nejbezpečnější režim. Můžete také nastavit hodnotu PeerOrChainTrust, která určuje, že certifikáty vystavené svým držitelem (vztah důvěryhodnosti) jsou přijímány, stejně jako certifikáty, které jsou v důvěryhodném řetězu. Tato hodnota se používá při vývoji a ladění klientů a služeb, protože certifikáty vydané svým držitelem nemusí být zakoupeny od důvěryhodné autority. Při nasazování klienta použijte místo toho hodnotu ChainTrust. Hodnotu můžete také nastavit na Custom (Vlastní) nebo None (Žádný). Chcete-li použít hodnotu Custom, musíte také nastavit CustomCertificateValidatorType
atribut na sestavení a typ použitý k ověření certifikátu. Pokud chcete vytvořit vlastní validátor, musíte dědit z abstraktní X509CertificateValidator třídy. Další informace naleznete v tématu Postupy: Vytvoření služby, která využívá vlastní validátor certifikátů.
Element <ověřování> obsahuje RevocationMode
atribut, který určuje, jak se certifikáty kontrolují pro odvolání. Výchozí hodnota je online, což znamená, že certifikáty se automaticky kontrolují pro odvolání. Další informace naleznete v tématu Práce s certifikáty.
ServiceAuthorization
Element <serviceAuthorization> obsahuje prvky, které ovlivňují autorizaci, vlastní zprostředkovatele rolí a zosobnění.
Třída PrincipalPermissionAttribute se použije na metodu služby. Atribut určuje skupiny uživatelů, které se mají použít při autorizaci použití chráněné metody. Výchozí hodnota je UseWindowsGroups a určuje, že skupiny Windows, například Administrators nebo Users, se hledají identitu, která se pokouší o přístup k prostředku. Můžete také zadat UseAspNetRoles pro použití vlastního zprostředkovatele role, který je nakonfigurován pod <system.web
> elementem, jak je znázorněno v následujícím kódu.
<system.web>
<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlConn"
applicationName="MembershipProvider"
enablePasswordRetrieval="false"
enablePasswordReset="false"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
</providers>
</membership>
<!-- Other configuration code not shown.-->
</system.web>
Následující kód ukazuje roleProviderName
použití s atributem principalPermissionMode
.
<behaviors>
<behavior name="ServiceBehaviour">
<serviceAuthorization principalPermissionMode ="UseAspNetRoles"
roleProviderName ="SqlProvider" />
</behavior>
<!-- Other configuration code not shown. -->
</behaviors>
Konfigurace auditů zabezpečení
<Pomocí serviceSecurityAudit> zadejte protokol zapsaný a typy událostí, které se mají protokolovat. Další informace najdete v tématu Auditování.
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
<serviceSecurityAudit auditLogLocation="Application"
suppressAuditFailure="true"
serviceAuthorizationAuditLevel="Success"
messageAuthenticationAuditLevel="Success" />
</behavior>
</serviceBehaviors>
</behaviors>
Secure Metadata Exchange
Export metadat do klientů je vhodný pro vývojáře služeb a klientů, protože umožňuje stahování konfigurace a kódu klienta. Aby se snížila expozice služby škodlivým uživatelům, je možné zabezpečit přenos pomocí mechanismu SSL přes HTTP (HTTPS). Abyste to mohli udělat, musíte nejprve vytvořit vazbu vhodného certifikátu X.509 na konkrétní port v počítači, který je hostitelem služby. (Další informace najdete v tématu Práce s certifikáty.) Za druhé přidejte serviceMetadata> do konfigurace služby a nastavte HttpsGetEnabled
atribut na true
.< Nakonec nastavte HttpsGetUrl
atribut na adresu URL koncového bodu metadat služby, jak je znázorněno v následujícím příkladu.
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
<serviceMetadata httpsGetEnabled="true"
httpsGetUrl="https://myComputerName/myEndpoint" />
</behavior>
</serviceBehaviors>
</behaviors>