Эта тема еще не получила оценку - Оценить эту тему

Инструкция по проверке подлинности с помощью сертификата клиента в службе WCF, защищенной ACS

Применяется к

  • Microsoft® Windows® Communication Foundation (WCF)

  • Службе управления доступом Microsoft® Windows Azure™ AppFabric (ACS)

Сводка

В этом разделе рассказывается, как писать код клиентов WCF, взаимодействующих со службами WCF, использующими федеративную проверку подлинности с применением Служба управления доступом (ACS) к Windows Azure AppFabric. В частности, здесь перечисляются этапы запроса маркера из Служба управления доступом по сертификату клиента.

Содержимое

  • Задачи

  • Общие сведения

  • Необходимые сведения

  • Этапы

  • Этап 1. Настройка проверяющей стороны с помощью портала управления ACS

  • Этап 2. Создание удостоверения службы и настройка ответа на запросы маркеров по сертификату клиента

  • Этап 3. Реализация привязки WS-Trust для выданного маркера по сертификату клиента

  • Этап 4. Создание службы WCF

  • Этап 5. Создание клиента WCF

  • Этап 6. Тестирование решения

  • Анализ

  • Связанные разделы

Задачи

  • Выявление и сбор нужных параметров конфигурации.

  • Реализация привязки WS-Trust для выданного маркера по сертификату клиента.

Общие сведения

Служба WCF может использовать Служба управления доступом для проверки подлинности. Такой подход называется федерацией проверки подлинности. При этом учетные данные (в текущем случае это сертификат клиента) контролируются Служба управления доступом. Клиент WCF передает учетные данные в Служба управления доступом и получает действительный маркер в случае успешной проверки. Маркер передается на проверку в службу WCF. Если проверка пройдена, запрос обрабатывается службой. Запрос маркера производится по протоколу WS-Trust. CertificateWSTrustBinding и IssuedTokenWSTrustBinding — это ключевые классы, помогающие наладить обмен учетными данными и маркерами между клиентом WCF, Служба управления доступом и службой WCF.

Необходимые сведения

В этой инструкции используется несколько сертификатов X.509 разных типов и разного назначения. Далее приведен список сертификатов, которые необходимо подготовить заранее, чтобы код работал правильно. Обратитесь к пункту Получение сертификата X.509 в разделе Инструкция по настройке отношения доверия между ACS и веб-приложением ASP.NET с помощью сертификатов X.509, чтобы узнать, как получить сертификат X.509. Обратите внимание, что имена файлов сертификатов ниже заданы произвольно. Вы можете использовать другие имена.

  • ACS2ClientCertificate.cer — это сертификат X.509, имеющий только открытый ключ. Он используется службой ACS при настройке учетных данных удостоверения службы.

  • ACS2ClientCertificate.pfx — это сертификат X.509, имеющий открытый и закрытый ключи. Он используется клиентом WCF при проверке подлинности в ACS. Данный сертификат задается в файле app.config клиента WCF.

  • ACS2SigningCertificate.cer — это сертификат X.509, имеющий только открытый ключ. Он используется службой WCF для проверки маркеров, подписанных службой ACS. Данный сертификат задается в файле app.config службы WCF.

  • ACS2SigningCertificate.pfx — это сертификат X.509, имеющий открытый и закрытый ключи. Он используется службой ACS для подписи выдаваемых маркеров. Задать его можно на портале ACS в разделе Сертификаты для подписи маркеров на странице Параметры приложения проверяющей стороны.

  • WcfServiceCertificate.cer — это сертификат X.509, имеющий только открытый ключ. Он используется службой ACS для шифрования маркеров, выдаваемых службе WCF. Задать его можно на портале ACS в разделе Сертификаты шифрования маркеров на странице Параметры приложения проверяющей стороны.

  • WcfServiceCertificate.pfx — это сертификат X.509, имеющий открытый и закрытый ключи. Он используется службой WCF для расшифровки маркеров, выданных службой ACS. Данный сертификат задается в файле app.config службы WCF.

В целях демонстрации здесь можно использовать сертификаты, предоставляемые в составе загружаемого пакета примеров кода. Эти сертификаты нельзя использовать в рабочей среде.

Этапы

  • Этап 1. Настройка проверяющей стороны с помощью портала управления ACS

  • Этап 2. Создание удостоверения службы и настройка ответа на запросы маркеров по сертификату клиента

  • Этап 3. Реализация привязки WS-Trust для выданного маркера по сертификату клиента

  • Этап 4. Создание службы WCF

  • Этап 5. Создание клиента WCF

  • Этап 6. Тестирование решения

Этап 1. Настройка проверяющей стороны с помощью портала управления ACS

На этом этапе служба WCF настраивается в качестве проверяющей стороны на портале управления Служба управления доступом.

Настройка службы WCF в качестве проверяющей стороны

  1. Откройте веб-сайт http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428).

  2. Выберите вкладку Шина службы, управление доступом и кэширование.

  3. Щелкните подузел Управление доступом в дереве в корневом узле AppFabric. Появится список пространств имен.

  4. Щелкните нужное пространство имен и выберите ленту Служба управления доступом. Откроется страница Служба управления доступом.

  5. Щелкните ссылку Приложения проверяющей стороны в разделе Отношения доверия.

  6. На странице Приложения проверяющей стороны щелкните ссылку Добавить. Откроется страница Добавление приложения проверяющей стороны.

  7. В разделе Параметры приложения проверяющей стороны задайте следующие параметры.

    • Имя — укажите отображаемое имя проверяющей стороны. Например: Пример проверяющей стороны с привязкой по сертификату.

    • Режим — выберите Ручной ввод параметров.

    • Область — укажите область службы WCF. Например: http://localhost:7000/Service/Default.aspx.

    • URL-адрес возврата — оставьте пустым.

    • URL-адрес ошибки — оставьте пустым.

    • Формат маркеров — выберите SAML 2.0.

    • Политика шифрования маркеров — выберите пункт Шифрование обязательно.

    • Срок действия маркера (сек.) — оставьте 600 сек.

  8. В разделе Параметры проверки подлинности задайте следующие параметры.

    • Поставщики удостоверений — не выбирайте ничего.

    • Группы правил — выберите пункт Создать новую группу правил.

  9. В разделе Параметры подписывания маркеров можно использовать сертификат пространства имен службы (стандартный вариант), но если вы предпочитаете использовать для подписи собственный сертификат, задайте следующие параметры.

    • Подписывание маркеров — выберите пункт Использовать выделенный сертификат.

    • Сертификат:

      • Файл — найдите сертификат X.509 с закрытым ключом (PFX-файл) для подписывания.

      • Пароль — введите пароль для PFX-файла, указанного выше.

  10. Это необходимо, если для службы WCF требуется шифрование. Используйте CER-файл, содержащий только открытый ключ, соответствующий сертификату с закрытым ключом, используемому в WCF для расшифровки сообщений. В разделе Шифрование маркеров выберите следующие значения:

    • Сертификат:

      • Файл — найдите сертификат X.509 (CER-файл) для шифрования маркеров этого приложения проверяющей стороны.

  11. Нажмите кнопку Сохранить.

При сохранении также будет создана группа правил. Теперь следует создать правила для нее.

Создание правил для группы правил

  1. На странице Служба управления доступом щелкните ссылку Группы правил.

  2. На странице Группы правил выберите пункт Группа правил по умолчанию для примера проверяющей стороны с привязкой по сертификату (она была создана ранее).

  3. На странице Изменение группы правил выберите команду Добавить внизу.

  4. На странице Добавление правила утверждения в разделе Если выберите пункт Служба управления доступом. Оставьте значения по умолчанию в остальных полях. Это правило осуществляет сквозную передачу всех утверждений.

  5. Нажмите кнопку Сохранить.

Этап 2. Создание удостоверения службы и настройка ответа на запросы маркеров по сертификату клиента

На этом этапе выполняется создание и настройка удостоверения службы для ответа на запросы маркеров по сертификату клиента.

Настройка использования сертификата клиента для удостоверения службы

  1. Откройте сайт http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) и войдите в систему.

  2. Выберите вкладку Шина службы, управление доступом и кэширование.

  3. Щелкните подузел Управление доступом в дереве в корневом узле AppFabric. Появится список пространств имен.

  4. Щелкните нужное пространство имен и выберите ленту Служба управления доступом. Откроется страница Служба управления доступом.

  5. В разделе Параметры службы щелкните ссылку Удостоверения службы.

  6. На странице Удостоверения службы щелкните ссылку Добавить.

  7. На странице Удостоверение службы укажите Имя.

  8. При необходимости добавьте описание в разделе Описание.

  9. На странице Параметры учетных данных укажите следующие сведения.

    • Тип — выберите в раскрывающемся списке Сертификат X.509.

    • Сертификат — нажмите кнопку Обзор и найдите сертификат X.509 (CER-файл) для использования в качестве учетных данных.

  10. На странице Изменение удостоверения службы дважды выберите команду Сохранить.

Этап 3. Реализация привязки WS-Trust для выданного маркера по сертификату клиента

На этом этапе выполняется создание библиотеки привязки WS-Trust для связи с Служба управления доступом для запроса маркеров по сертификату клиента. Эта библиотека затем будет использоваться клиентом WCF и службой WCF.

Создание привязки WS-Trust

  1. В среде Visual Studio® 2010 создайте пустое решение, добавьте проект библиотеки классов и дайте ему имя наподобие .

  2. Добавьте ссылку на следующие сборки:

    • System.ServiceModel

    • System.IdentityModel

    • Microsoft.IdentityModel

  3. Добавьте открытый статический класс с именем наподобие Bindings.

  4. Добавьте следующие объявления:

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using Microsoft.IdentityModel.Protocols.WSTrust.Bindings;
    
    
    
  5. Добавьте метод, создающий привязку WS-Trust по сертификату.

            public static Binding CreateAcsCertificateBinding()
            {
                return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential);
            }
    
    
  6. Добавьте метод, создающий привязку WS-Trust по выданному маркеру с именем пользователя.

            public static Binding CreateServiceBinding(string acsCertificateEndpoint)
            {
                return new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint));
            }
    
    
  7. Сохраните решение. Полный код привязки должен иметь приблизительно такой вид:

        public static class Bindings
        {
            public static Binding CreateServiceBinding(string acsCertificateEndpoint)
            {
                return new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint));
            }
    
            public static Binding CreateAcsCertificateBinding()
            {
                return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential);
            }
        }
    
    
  8. Скомпилируйте проект, чтобы устранить ошибки.

Этап 4. Создание службы WCF

На этом этапе создается служба WCF, использующая маркер, выдаваемый Служба управления доступом. В качестве примера создадим простую службу WCF, принимающую строку и обращающую порядок символов в ней.

Создание службы WCF, использующей маркер, выдаваемый ACS

  1. В Visual Studio 2010 создайте новый проект консольного приложения Windows. Для простоты служба WCF будет размещена в консольном приложении.

  2. Добавьте ссылку на созданный ранее проект WSTrustBinding.

  3. Добавьте ссылку на следующие сборки:

    • System.ServiceModel

    • System.IdentityModel

    • Microsoft.IdentityModel

    • System.Configuration

  4. Создайте контракт службы. Для этого добавьте новый проект библиотеки классов и дайте ему имя наподобие Interfaces.

  5. Добавьте в проект Interfaces файл с открытым интерфейсом. Назовите его IStringService.

  6. Добавьте ссылку на сборку System.ServiceModel.

  7. Добавьте в начале следующее объявление:

    using System.ServiceModel;
    
    
  8. Добавьте следующий код:

        [ServiceContract]
        public interface IStringService
        {
            [OperationContract]
            string Reverse( string value );
        }
    
    
  9. Вернитесь к консольному приложению службы WCF и добавьте ссылку на только что созданный проект Interfaces.

  10. Добавьте реализацию контракта службы. Для этого добавьте в проект новый файл класса. Назовите его StringService.cs.

  11. Добавьте следующую реализацию:

        public class StringService : IStringService
        {
            public string Reverse( string value )
            {
                char[] chars = value.ToCharArray();
                Array.Reverse( chars );
                return new string( chars );
            }
        }
    
    
  12. Реализуйте IssuerNameRegistry. IssuerNameRegistry — это точка выбора доверия, отклоняющая маркеры от неизвестных или ненадежных издателей. Это мера предосторожности. Чтобы реализовать IssuerNameRegistry, добавьте в проект службы WCF файл класса, например X509IssuerNameRegistry.cs.

  13. Добавьте в начале следующее объявление:

    using System.Collections.Generic;
    using System.IdentityModel.Tokens;
    using Microsoft.IdentityModel.Tokens;
    using Interfaces;
    
    
  14. Добавьте следующую реализацию:

    
    /// <summary>
        /// Implements an IssuerNameRegistry that only recognizes a specific
        /// set of issuer subject names.
        /// </summary>
        class X509IssuerNameRegistry : IssuerNameRegistry
        {
            List<string> _trustedSubjectNames = new List<string>();
    
            /// <summary>
            /// Constructs an instance of X509IssuerNameRegistry.
            /// </summary>
            /// <param name="trustedSubjectNames">The subject names that can be recognized.</param>
            public X509IssuerNameRegistry( params string[] trustedSubjectNames )
            {
                _trustedSubjectNames = new List<string>( trustedSubjectNames );
            }
    
            /// <summary>
            /// Determines what the issuer name will be on claims contained in tokens.
            /// </summary>
            /// <param name="securityToken">
            /// The security token to extract the issuer name from. This token typically signed the
            /// token containing claims and represents the issuer.
            /// </param>
            /// <returns>The issuer name to be put on claims.</returns>
            public override string GetIssuerName( SecurityToken securityToken )
            {
                X509SecurityToken x509Token = securityToken as X509SecurityToken;
                if ( x509Token != null )
                {
                    //
                    // Check the list of trusted/permissible issuers
                    //
                    if ( _trustedSubjectNames.Contains( x509Token.Certificate.SubjectName.Name ) )
                    {
                        return x509Token.Certificate.SubjectName.Name;
                    }
                }
    
                //
                // Complain in all other situations.
                //
                throw new SecurityTokenException( "Untrusted issuer." );
            }
        }
    
    
  15. Реализуйте создание экземпляра узла службы.

  16. Добавьте в начале класса Program следующее объявление:

    using System.Configuration;
    using System.Security.Cryptography.X509Certificates;
    using System.ServiceModel;
    using System.ServiceModel.Security;
    using Microsoft.IdentityModel.Configuration;
    using Microsoft.IdentityModel.Tokens;
    using Microsoft.IdentityModel.Tokens.Saml2;
    using WSTrustBinding;
    using Interfaces;
    
    
  17. Чтобы реализовать создание экземпляра, добавьте в класс Program следующий код (перед методом Main):

    static string AccessControlHostName = 
    ConfigurationManager.AppSettings.Get( "AccessControlHostName" );
            static string AccessControlNamespace = 
    ConfigurationManager.AppSettings.Get( "AccessControlNamespace" );
            static string AccessControlSigningCertificateFilePath = 
    ConfigurationManager.AppSettings.Get(
    "AccessControlSigningCertificateFilePath" );
            static string ServiceAddress = 
    ConfigurationManager.AppSettings.Get( "ServiceAddress" );
            static string ServiceCertificateFilePath = 
    ConfigurationManager.AppSettings.Get( "ServiceCertificateFilePath" );
            static string ServiceCertificatePassword = 
    ConfigurationManager.AppSettings.Get( "ServiceCertificatePassword" );
    
            private static X509Certificate2 GetAcsSigningCertificate()
            {
                return new X509Certificate2( AccessControlSigningCertificateFilePath );
            }
    
            private static X509Certificate2 GetServiceCertificateWithPrivateKey()
            {
                return new X509Certificate2( ServiceCertificateFilePath, ServiceCertificatePassword );
            }
    
            private static ServiceHost CreateWcfServiceHost()
            {
                string acsUsernameEndpoint = String.Format( "https://{0}.{1}/v2/wstrust/13/username", AccessControlNamespace, AccessControlHostName );
    
                ServiceHost rpHost = new ServiceHost( typeof( StringService ) );
    
                rpHost.Credentials.ServiceCertificate.Certificate = GetServiceCertificateWithPrivateKey();
    
                rpHost.AddServiceEndpoint( typeof( IStringService ),
                                           Bindings.CreateServiceBinding( acsUsernameEndpoint ),
                                           ServiceAddress );
    
                //
                // This must be called after all WCF settings are set on the service host so the
                // Windows Identity Foundation token handlers can pick up the relevant settings.
                //
                ServiceConfiguration serviceConfiguration = new ServiceConfiguration();
                serviceConfiguration.CertificateValidationMode = X509CertificateValidationMode.None;
    
                // Accept ACS signing certificate as Issuer.
                serviceConfiguration.IssuerNameRegistry = new X509IssuerNameRegistry( GetAcsSigningCertificate().SubjectName.Name );
    
                // Add the SAML 2.0 token handler.
                serviceConfiguration.SecurityTokenHandlers.AddOrReplace( new Saml2SecurityTokenHandler() );
    
                // Add the address of this service to the allowed audiences.
                serviceConfiguration.SecurityTokenHandlers.Configuration.AudienceRestriction.AllowedAudienceUris.Add( new Uri( ServiceAddress ) );
    
                FederatedServiceCredentials.ConfigureServiceHost( rpHost, serviceConfiguration );
    
                return rpHost;
            }
    
    
  18. Укажите следующую конфигурацию в файле app.config:

      <appSettings>
        <!-- ACS v2 configuration -->
        <add key="AccessControlHostName" value="accesscontrol.windows.net"/>
        <add key="AccessControlNamespace" value="...update to your service namespace..."/>
        <add key="AccessControlSigningCertificateFilePath" value="...update to path to ACS signing certificate (.cer)..." />
        
        <!-- Service configuration -->
        <add key="ServiceAddress" value="...update to your service address..." />
        <add key="ServiceCertificateFilePath" value="...update to your service certificate path..."/>
        <add key="ServiceCertificatePassword" value="...update to your service certificate password..."/>
      </appSettings>
    
    
  19. Создайте экземпляр узла службы. Чтобы сделать это, добавьте в класс Program следующий код (в методе Main):

    ServiceHost rpHost = CreateWcfServiceHost();
    
                rpHost.Open();
    
                Console.WriteLine( "StringService has been started." );
                Console.WriteLine();
                Console.WriteLine( "Press <ENTER> to exit" );
                Console.WriteLine();
                Console.ReadLine();
    
                rpHost.Close();
    
    
    
  20. Укажите проект службы WCF в качестве начального, щелкнув его в обозревателе решений правой кнопкой мыши и выбрав команду Назначить запускаемым проектом.

  21. Добавьте в файл app.config конфигурацию ACS.

  22. Протестируйте проект, нажав клавишу F5.

  23. Должно появиться следующее сообщение:

    StringService has been started.
    Press <ENTER>  to exit
    
    
  24. Если возникает сообщение об ошибке, аналогичное следующему, то устранить его можно, пройдя по ссылке и выполнив инструкции или запустив Visual Studio 2010 от имени администратора.

    HTTP could not register URL http://+:7000/Service/Default.aspx/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).
    
    

Этап 5. Создание клиента WCF

На этом этапе создается канал связи между клиентом и службой WCF, использующей федеративную проверку подлинности Служба управления доступом.

Создание клиента WCF

  1. В Visual Studio 2010 создайте в имеющемся решении новый проект консольного приложения Windows. Назовите его WCFClient.

  2. Добавьте ссылку на созданный ранее проект WSTrustBinding.

  3. Добавьте ссылку на проект Interfaces.

  4. Добавьте ссылку на следующие сборки:

    • System.ServiceModel

    • System.IdentityModel

    • Microsoft.IdentityModel

    • System.Configuration

  5. Добавьте в начале класса Program следующее объявление:

    using System.Configuration;
    using System.Diagnostics;
    using System.Security.Cryptography.X509Certificates;
    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Security;
    using Interfaces;
    using WSTrustBinding;
    
    
  6. Реализуйте ChannelFactory службы. Добавьте в класс Program следующий код:

            static string AccessControlHostName       = 
    ConfigurationManager.AppSettings.Get( "AccessControlHostName" );
            static string AccessControlNamespace      = 
    ConfigurationManager.AppSettings.Get( "AccessControlNamespace" );
    
            static string ServiceAddress              = 
    ConfigurationManager.AppSettings.Get( "ServiceAddress" );
            static string ServiceCertificateFilePath  = 
    ConfigurationManager.AppSettings.Get( "ServiceCertificateFilePath" );
    
    
            static string ClientCertificateFilePath   = ConfigurationManager.AppSettings.Get("ClientCertificateFilePath");
            static string ClientCertificatePassword   = ConfigurationManager.AppSettings.Get("ClientCertificatePassword");
    
    
            private static ChannelFactory<IStringService> CreateChannelFactory(string acsEndpoint, string serviceEndpoint)
            {
                //
                // The WCF service endpoint host name may not match the service certificate subject.
                // By default, the host name is 'localhost' and the certificate subject is 'WcfServiceCertificate'.
                // Create a DNS Endpoint identity to match WcfServiceCertificate.
                //
                EndpointAddress serviceEndpointAddress = new EndpointAddress( new Uri( serviceEndpoint ), 
                                                                              EndpointIdentity.CreateDnsIdentity( GetServiceCertificateSubjectName() ),
                                                                              new AddressHeaderCollection() );
    
                ChannelFactory<IStringService> stringServiceFactory = new ChannelFactory<IStringService>(Bindings.CreateServiceBinding(acsEndpoint), serviceEndpointAddress);
    
                // Set the service credentials and disable certificate validation to work with sample certificates
                stringServiceFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
                stringServiceFactory.Credentials.ServiceCertificate.DefaultCertificate = GetServiceCertificate();
    
                // Set the client credentials.
                stringServiceFactory.Credentials.ClientCertificate.Certificate = GetClientCertificateWithPrivateKey();
    
    
                return stringServiceFactory;
            }
            private static X509Certificate2 GetClientCertificateWithPrivateKey()
            {
                return new X509Certificate2(ClientCertificateFilePath, ClientCertificatePassword);
            }
    
            private static X509Certificate2 GetServiceCertificate()
            {
                return new X509Certificate2( ServiceCertificateFilePath );
            }
    
            private static string GetServiceCertificateSubjectName()
            {
                const string cnPrefix = "CN=";
                string subjectFullName = GetServiceCertificate().Subject;
                Debug.Assert( subjectFullName.StartsWith( cnPrefix ) );
                return subjectFullName.Substring( cnPrefix.Length );
            }
    
    
  7. Добавьте следующий код в метод Main. При этом будет вызываться служба:

                Console.WriteLine( "Enter a string to reverse, then press <ENTER>" );
                string userInputString = Console.ReadLine();
                Console.WriteLine();
    
                string acsUsernameEndpoint = String.Format( "https://{0}.{1}/v2/wstrust/13/username", AccessControlNamespace, AccessControlHostName );
    
                ChannelFactory<IStringService> stringServiceFactory = CreateChannelFactory (acsUsernameEndpoint, ServiceAddress );
                IStringService stringService = stringServiceFactory.CreateChannel();
                ICommunicationObject channel = (ICommunicationObject)stringService;
    
                string outputString = stringService.Reverse( userInputString );
    
                Console.WriteLine( "Service responded with: " + outputString );
                Console.WriteLine();
                Console.WriteLine( "Press <ENTER> to exit" );
                Console.ReadLine();
    
                channel.Close();
    
    
  8. Добавьте следующую конфигурацию в файле app.config: Примечание. Задайте для параметров конфигурации, приведенных ниже, собственные значения, чтобы код работал правильно.

    <appSettings>
        <!-- ACS v2 configuration -->
        <add key="AccessControlHostName" value="accesscontrol.windows.net"/>
        <add key="AccessControlNamespace" value="...update to your service namespace..."/>
    
        <!-- Service configuration -->
        <add key="ServiceAddress" value=" " />
        <add key="ServiceCertificateFilePath" value="..path to service certificate file (.CER).. "/>
    
        <!-- Client configuration -->
        <add key="ClientCertificateFilePath" value="..path to client certificate (.PFX).."/>    
        <add key="ClientCertificatePassword" value="..pfx file password.."/>
        
      </appSettings>
    
    
  9. Добавьте в файл app.config данные ACS.

Этап 6. Тестирование решения

На этом этапе решение тестируется.

Тестирование решения

  1. Сначала запустите службу WCF, нажав клавишу F5. Служба должна быть указана как запускаемый проект. Должно запуститься консольное приложение со следующим сообщением.

    StringService has been started.
    Press <ENTER>  to exit
    
  2. Запустите клиент WCF, щелкнув соответствующий проект в обозревателе решений правой кнопкой мыши и выбрав команду Отладка и Запустить новый экземпляр. Должно запуститься новое консольное приложение со следующим сообщением.

    Enter a string to reverse, then press <ENTER>
    
  3. Введите произвольную строку, например "hello world!", и нажмите клавишу ВВОД.

  4. В консольном приложении должно появиться следующее сообщение:

    hello world!
    Service responded with: !dlrow olleh
    Press <ENTER> to exit
    
    

Анализ

  • Безопасность — в прилагаемом примере имеется функция TrustAllCertificates(). Она предназначена только для демонстрации. Ее следует удалить; для SSL следует использовать действительные сертификаты. Также в прилагаемом примере параметр CertificateValidationMode имеет значение X509CertificateValidationMode.None. Это предназначено только для демонстрации. Следует задать значение PeerOrChainTrust.

Связанные разделы

Была ли вам полезна эта информация?
(1500 символов осталось)
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
© 2013 Microsoft. Все права защищены.
facebook page visit twitter rss feed newsletter