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í:

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 ChainTrusthodnotu , 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 PeerOrChainTrustna 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 Customhodnotu . 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> na Always nebo BearerKeyOnly.

  • 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>

Viz také