Sdílet prostřednictvím


Zabezpečení klientů

Ve Windows Communication Foundation (WCF) určuje služba požadavky na zabezpečení pro klienty. To znamená, že služba určuje, jaký režim zabezpečení se má použít a jestli klient musí poskytnout přihlašovací údaje. Proces zabezpečení klienta je proto jednoduchý: použijte metadata získaná ze služby (pokud je publikovaná) a sestavte klienta. Metadata určují, jak nakonfigurovat klienta. Pokud služba vyžaduje, aby klient zadá přihlašovací údaje, musíte získat přihlašovací údaje, které odpovídají požadavkům. Toto téma podrobně popisuje proces. Další informace o vytvoření zabezpečené služby naleznete v tématu Zabezpečení služeb.

Služba určuje zabezpečení.

Ve výchozím nastavení mají vazby WCF povolené funkce zabezpečení. (Výjimkou je BasicHttpBinding.) Proto pokud byla služba vytvořena pomocí WCF, existuje větší šance, že implementuje zabezpečení, aby se zajistilo ověřování, důvěrnost a integrita. V takovém případě budou metadata, která služba poskytuje, indikovat, co vyžaduje k vytvoření zabezpečeného komunikačního kanálu. Pokud metadata služby neobsahují žádné požadavky na zabezpečení, neexistuje způsob, jak pro službu zavést schéma zabezpečení, jako je protokol SSL (Secure Sockets Layer) přes protokol HTTP. Pokud však služba vyžaduje, aby klient zadá přihlašovací údaje, pak vývojář klienta, nasazér nebo správce musí zadat skutečné přihlašovací údaje, které klient použije k ověření ve službě.

Získávání metadat

Při vytváření klienta je prvním krokem získání metadat pro službu, se kterou bude klient komunikovat. To lze provést dvěma způsoby. Nejprve, pokud služba publikuje koncový bod výměny metadat (MEX) nebo zpřístupňuje jeho metadata přes PROTOKOL HTTP nebo HTTPS, můžete si metadata stáhnout pomocí nástroje ServiceModel Metadata Utility (Svcutil.exe), který vygeneruje oba soubory kódu pro klienta i konfigurační soubor. (Další informace o použití nástroje najdete v tématu Přístup ke službám pomocí klienta WCF.) Pokud služba nepublikuje koncový bod MEX a také neposkytuje metadata prostřednictvím protokolu HTTP nebo HTTPS, musíte se obrátit na tvůrce služby s žádostí o dokumentaci, která popisuje požadavky na zabezpečení a metadata.

Důležité

Doporučuje se, aby metadata pocházejí z důvěryhodného zdroje a aby se s ním ne manipulovala. Metadata načtená pomocí protokolu HTTP se odesílají v prostém textu a dají se s ním manipulovat. Pokud služba používá vlastnosti HttpsGetEnabled a HttpsGetUrl vlastnosti, použijte adresu URL, které tvůrce služby zadal ke stažení dat pomocí protokolu HTTPS.

Ověřování zabezpečení

Zdroje metadat je možné rozdělit do dvou širokých kategorií: zdroje důvěryhodnosti a nedůvěryhodné zdroje. Pokud důvěřujete zdroji a stáhli jste kód klienta a další metadata z zabezpečeného koncového bodu MEX daného zdroje, můžete sestavit klienta, zadat je správnými přihlašovacími údaji a spustit ho bez dalších obav.

Pokud se ale rozhodnete stáhnout klienta a metadata ze zdroje, o kterých víte něco málo, nezapomeňte ověřit bezpečnostní opatření, která kód používá. Například nesmíte jednoduše vytvořit klienta, který do služby odesílá vaše osobní nebo finanční informace, pokud služba nevyžaduje důvěrnost a integritu (přinejmenším). Měli byste důvěřovat majiteli služby v rozsahu, v jakém jste ochotni takové informace zveřejnit, protože tyto informace budou viditelné pro ně.

Proto při použití kódu a metadat z nedůvěryhodného zdroje zkontrolujte kód a metadata a ujistěte se, že splňuje požadovanou úroveň zabezpečení.

Nastavení přihlašovacích údajů klienta

Nastavení přihlašovacích údajů klienta na klientovi se skládá ze dvou kroků:

  1. Určete typ přihlašovacích údajů klienta, který služba vyžaduje. Toho se dosahuje jednou ze dvou metod. Pokud máte dokumentaci od autora služby, měli byste nejprve zadat typ přihlašovacích údajů klienta (pokud existuje). Pokud máte pouze konfigurační soubor vygenerovaný nástrojem Svcutil.exe, můžete zkontrolovat jednotlivé vazby a zjistit, jaký typ přihlašovacích údajů je potřeba.

  2. Zadejte skutečné přihlašovací údaje klienta. Skutečné přihlašovací údaje klienta se označují jako hodnota přihlašovacích údajů klienta, aby se odlišily od typu. Pokud například typ přihlašovacích údajů klienta určuje certifikát, musíte zadat certifikát X.509 vydaný certifikační autoritou, kterému služba důvěřuje.

Určení typu přihlašovacích údajů klienta

Pokud máte konfigurační soubor, který nástroj Svcutil.exe vygeneroval, projděte si <část vazby> a zjistěte, jaký typ přihlašovacích údajů klienta se vyžaduje. V rámci oddílu jsou prvky vazby, které určují požadavky na zabezpečení. Konkrétně prozkoumejte <prvek zabezpečení> každé vazby. Tento prvek obsahuje mode atribut, který můžete nastavit na jednu ze tří možných hodnot (Message, Transportnebo TransportWithMessageCredential). Hodnota atributu určuje režim a režim určuje, který z podřízených prvků je významný.

Prvek <security> může obsahovat buď prvek <transport> <message> , nebo obojí. Důležitým prvkem je ten, který odpovídá režimu zabezpečení. Například následující kód určuje, že je režim "Message"zabezpečení a typ přihlašovacích údajů klienta pro <message> prvek je "Certificate". V tomto případě <transport> lze prvek ignorovat. Prvek <message> však určuje, že musí být zadán certifikát X.509.

<wsHttpBinding>  
    <binding name="WSHttpBinding_ICalculator">  
       <security mode="Message">  
           <transport clientCredentialType="Windows"
                      realm="" />  
           <message clientCredentialType="Certificate"
                    negotiateServiceCredential="true"  
                    algorithmSuite="Default"
                    establishSecurityContext="true" />  
       </security>  
    </binding>  
</wsHttpBinding>  

Všimněte si, že pokud clientCredentialType je atribut nastaven na "Windows", jak je znázorněno v následujícím příkladu, nemusíte zadávat skutečnou hodnotu přihlašovacích údajů. Důvodem je to, že integrované zabezpečení Windows poskytuje skutečné přihlašovací údaje (token Kerberos) osoby, která spouští klienta.

<security mode="Message">  
    <transport clientCredentialType="Windows "
        realm="" />  
</security>  

Nastavení hodnoty přihlašovacích údajů klienta

Pokud se zjistí, že klient musí zadat přihlašovací údaje, použijte příslušnou metodu ke konfiguraci klienta. Například k nastavení klientského certifikátu použijte metodu SetCertificate .

Běžnou formou přihlašovacích údajů je certifikát X.509. Přihlašovací údaje můžete zadat dvěma způsoby:

  • Programováním v klientském kódu (pomocí SetCertificate metody)

<Přidáním oddílu chování> konfiguračního souboru pro klienta a použitím elementu clientCredentials (viz níže).

<Nastavení hodnoty clientCredentials> v kódu

Chcete-li nastavit <hodnotu clientCredentials> v kódu, musíte přistupovat k ClientCredentials vlastnosti ClientBase<TChannel> třídy. Vlastnost vrátí ClientCredentials objekt, který umožňuje přístup k různým typům přihlašovacích údajů, jak je znázorněno v následující tabulce.

ClientCredential – vlastnost Popis Notes
ClientCertificate Vrátí hodnotu X509CertificateInitiatorClientCredential Představuje certifikát X.509 poskytnutý klientem pro ověření ve službě.
HttpDigest Vrátí hodnotu HttpDigestClientCredential Představuje přihlašovací údaje protokolu HTTP digest. Přihlašovací údaje jsou hodnotou hash uživatelského jména a hesla.
IssuedToken Vrátí hodnotu IssuedTokenClientCredential Představuje vlastní token zabezpečení vydaný službou tokenů zabezpečení, který se běžně používá ve scénářích federace.
Peer Vrátí hodnotu PeerCredential Představuje přihlašovací údaje peera pro účast v partnerské síti v doméně Windows.
ServiceCertificate Vrátí hodnotu X509CertificateRecipientClientCredential Představuje certifikát X.509 poskytovaný službou v rámci vzdáleného vyjednávání.
UserName Vrátí hodnotu UserNamePasswordClientCredential Představuje dvojici uživatelských jmen a hesel.
Windows Vrátí hodnotu WindowsClientCredential Představuje přihlašovací údaje klienta systému Windows (přihlašovací údaje kerberos). Vlastnosti třídy jsou jen pro čtení.

<Nastavení hodnoty clientCredentials> v konfiguraci

Hodnoty přihlašovacích údajů jsou určeny pomocí chování koncového bodu jako podřízené prvky elementu <clientCredentials> . Použitý prvek závisí na typu přihlašovacích údajů klienta. Například následující příklad ukazuje konfiguraci pro nastavení certifikátu X.509 pomocí <<clientCertificate.>

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <endpointBehaviors>
        <behavior name="myEndpointBehavior">  
          <clientCredentials>  
            <clientCertificate findvalue="myMachineName"
            storeLocation="Current" X509FindType="FindBySubjectName" />  
          </clientCredentials>  
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>  
</configuration>  

Pokud chcete nastavit přihlašovací údaje klienta v konfiguraci, přidejte do konfiguračního souboru element endpointBehaviors>.< Kromě toho musí být přidaný prvek chování propojený s koncovým bodem služby pomocí behaviorConfiguration atributu koncového <bodu> klientského <> elementu, jak je znázorněno v následujícím příkladu. Hodnota atributu behaviorConfiguration musí odpovídat hodnotě atributu chování name .

<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="http://localhost/servicemodelsamples/service.svc"
                binding="wsHttpBinding"
                bindingConfiguration="Binding1"
                behaviorConfiguration="myEndpointBehavior"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </client>
  </system.serviceModel>
</configuration>

Poznámka:

Některé hodnoty přihlašovacích údajů klienta nelze nastavit pomocí konfiguračních souborů aplikace, například uživatelského jména a hesla nebo hodnot uživatele a hesla systému Windows. Tyto hodnoty přihlašovacích údajů lze zadat pouze v kódu.

Další informace o nastavení přihlašovacích údajů klienta naleznete v tématu Postupy: Určení hodnot přihlašovacích údajů klienta.

Poznámka:

ClientCredentialType je ignorována, pokud SecurityMode je nastavena na "TransportWithMessageCredential", jak je znázorněno v následující ukázkové konfiguraci.

<wsHttpBinding>  
    <binding name="PingBinding">  
        <security mode="TransportWithMessageCredential"  >  
           <message  clientCredentialType="UserName"
               establishSecurityContext="false"
               negotiateServiceCredential="false" />  
           <transport clientCredentialType="Certificate"  />  
         </security>  
    </binding>  
</wsHttpBinding>  

Viz také