Sdílet prostřednictvím


Postupy: Zadání hodnot přihlašovacích údajů klienta

Pomocí technologie Windows Communication Foundation (WCF) může služba určit, jak se klient ověřuje ve službě. Služba může například stanovit, že se klient ověřuje pomocí certifikátu.

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

  1. Načtěte metadata z koncového bodu metadat služby. Metadata se obvykle skládají ze dvou souborů: kód klienta v programovacím jazyce podle vašeho výběru (výchozí nastavení je Visual C#) a konfigurační soubor XML. Jedním ze způsobů, jak načíst metadata, je použití nástroje Svcutil.exe k vrácení kódu klienta a konfigurace klienta. Další informace naleznete v tématu Načítání metadat a ServiceModel Metadata Utility Tool (Svcutil.exe).

  2. Otevřete konfigurační soubor XML. Pokud používáte nástroj Svcutil.exe, výchozí název souboru je Output.config.

  3. Najděte prvek zabezpečení> s atributem režimu (<režim zabezpečení =>MessageOrTransport kde MessageOrTransport je nastaven na jeden z režimů zabezpečení.<

  4. Vyhledejte podřízený prvek, který odpovídá hodnotě režimu. Pokud je například režim nastaven na Message, najděte <prvek zprávy> obsažený v <prvku zabezpečení>.

  5. Poznamenejte si hodnotu přiřazenou atributu clientCredentialType . Skutečná hodnota závisí na použitém režimu, přenosu nebo zprávě.

Následující kód XML ukazuje konfiguraci klienta pomocí zabezpečení zpráv a vyžaduje certifikát k ověření klienta.

<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
        realm="" />
     <message clientCredentialType="Certificate" negotiateServiceCredential="true"
    algorithmSuite="Default" establishSecurityContext="true" />
</security>

Příklad: Režim přenosu TCP s certifikátem jako přihlašovací údaje klienta

Tento příklad nastaví režim zabezpečení na transportní režim a nastaví hodnotu přihlašovacích údajů klienta na certifikát X.509. Následující postupy ukazují, jak nastavit hodnotu přihlašovacích údajů klienta v klientovi v kódu a konfiguraci. Předpokládá se, že jste použili nástroj ServiceModel Metadata Utility (Svcutil.exe) k vrácení metadat (kódu a konfigurace) ze služby. Další informace naleznete v tématu Postupy: Vytvoření klienta.

Zadání hodnoty přihlašovacích údajů klienta v klientovi v kódu

  1. Ke generování kódu a konfigurace ze služby použijte nástroj ServiceModel Metadata Utility (Svcutil.exe).

  2. Vytvořte instanci klienta WCF pomocí vygenerovaného kódu.

  3. V klientské třídě nastavte ClientCredentials vlastnost ClientBase<TChannel> třídy na odpovídající hodnotu. Tento příklad nastaví vlastnost na certifikát X.509 pomocí SetCertificate metody X509CertificateInitiatorClientCredential třídy.

    // Create a binding using Transport and a certificate.
    NetTcpBinding b = new NetTcpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType =
        TcpClientCredentialType.Certificate;
    
    // Create an EndPointAddress.
    EndpointAddress ea = new EndpointAddress(
        "net.tcp://localHost:8036/Calculator/MyCalculator");
    
    // Create the client.
    CalculatorClient cc = new CalculatorClient(b, ea);
    
    // Set the certificate for the client.
    cc.ClientCredentials.ClientCertificate.SetCertificate(
        StoreLocation.LocalMachine,
        StoreName.My,
        X509FindType.FindBySubjectName,
        "cohowinery.com");
    try
    {
        cc.Open();
        // Begin using the client.
        Console.WriteLine(cc.Divide(1001, 2));
        cc.Close();
    }
    catch (AddressAccessDeniedException adExc)
    {
        Console.WriteLine(adExc.Message);
        Console.ReadLine();
    }
    catch (System.Exception exc)
    {
        Console.WriteLine(exc.Message);
        Console.ReadLine();
    }
    
    ' Create a binding using Transport and a certificate.
    Dim b As New NetTcpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
    
    ' Create an EndPointAddress.
    Dim ea As New EndpointAddress("net.tcp://localHost:8036/Calculator/MyCalculator")
    
    ' Create the client.
    Dim cc As New CalculatorClient(b, ea)
    
    ' Set the certificate for the client.
    cc.ClientCredentials.ClientCertificate.SetCertificate( _
    StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com")
    Try
        cc.Open()
        ' Begin using the client.
        Console.WriteLine(cc.Divide(1001, 2))
        cc.Close()
    Catch adExc As AddressAccessDeniedException
        Console.WriteLine(adExc.Message)
        Console.ReadLine()
    Catch exc As System.Exception
        Console.WriteLine(exc.Message)
        Console.ReadLine()
    End Try
    

    Můžete použít libovolný výčet X509FindType třídy. Název subjektu se tady používá pro případ, že se certifikát změní (kvůli datu vypršení platnosti). Použití názvu subjektu umožňuje infrastruktuře znovu najít certifikát.

Určení hodnoty přihlašovacích údajů klienta v klientovi v konfiguraci

  1. Přidejte do elementu <behaviors> prvek chování>.<

  2. Přidejte element clientCredentials> do elementu <behaviors>.< Nezapomeňte nastavit požadovaný name atribut na odpovídající hodnotu.

  3. Přidejte element clientCertificate> do elementu <clientCredentials>.<

  4. Nastavte následující atributy na odpovídající hodnoty: storeLocation, storeName, x509FindTypea findValue, jak je znázorněno v následujícím kódu. Další informace o certifikátech naleznete v tématu Práce s certifikáty.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredentialBehavior">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com"
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. Při konfiguraci klienta určete chování nastavením behaviorConfiguration atributu <endpoint> elementu, jak je znázorněno v následujícím kódu. Element koncového bodu je podřízeným prvkem <klienta> . Zadejte také název konfigurace vazby nastavením bindingConfiguration atributu na vazbu pro klienta. Pokud používáte vygenerovaný konfigurační soubor, název vazby se automaticky vygeneruje. V tomto příkladu je "tcpBindingWithCredential"název .

    <client>
      <endpoint name =""
                address="net.tcp://contoso.com:8036/aloha"
                binding="netTcpBinding"
                bindingConfiguration="tcpBindingWithCredential"
                behaviorConfiguration="endpointCredentialBehavior" />
    </client>
    

Viz také