Как настроить XML-веб-службу для проверки подлинности Windows

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Code Example

В следующих инструкциях показано, как настроить и передать учетные данные клиента веб-службе, используя все формы проверки подлинности Windows, кроме учетных данных клиента. Если используется учетные данные клиента, следуйте инструкциям в разделе "Проверка подлинности с помощью сертификата клиента".

Настройка XML-веб-службы для проверки подлинности Windows

  1. Настройте веб-службу так, чтобы она использовала проверку подлинности Windows с помощью службы IIS.

    Служба IIS позволяет задать параметры безопасности на уровне каталога либо на уровне файла. Если требуется задать параметры безопасности веб-службы отдельно для каждого файла, задайте разрешения веб-службе в файле .asmx службы IIS. Файл .asmx является точкой входа веб-службы. Дополнительные сведения см. в документации по IIS.

  2. Измените файл конфигурации, указав в нем проверку подлинности Windows.

    Задайте атрибуту mode XML-элемента authentication в файле конфигурации значение "Windows". В следующем примере кода показано изменение файла конфигурации для использования проверки подлинности Windows.

    // Fragment of a Web.config file.
    <authentication mode= "Windows">
    </authentication> 
    

Передача учетных данных клиента веб-службе с помощью проверки подлинности Windows

  1. Создайте новый экземпляр прокси-класса веб-службы. Если прокси-класс еще не сгенерирован, см. раздел Создание прокси-класса XML-веб-службы

  2. Создайте новый экземпляр класса NetworkCredential, указав свойства UserName, Password и Domain.

  3. Создайте новый экземпляр класса CredentialCache.

  4. Добавьте экземпляр класса NetworkCredential в экземпляру класса CredentialCache с помощью метода Add объекта CredentialCache

  5. Назначьте экземпляр класса CredentialCache свойству Credentials прокси-класса.

    Если используется встроенная проверка подлинности Windows, необходимо задать свойству Credentials значение System.Net.CredentialCache.DefaultCredentials.

    Когда свойству Credentials присваивается значение DefaultCredentials, клиент запрашивает у сервера проверку подлинности Kerberos и/или NTLM, в зависимости от конфигурации сервера.

  6. В следующем примере кода задаются учетные данные клиента, переданные методу веб-службы с помощью проверки подлинности Windows.

Проверка подлинности с помощью сертификата клиента

В следующих инструкциях показано, как настроить и передать учетные данные клиента веб-службе, используя проверку подлинности Windows с помощью учетных данных клиента.

Настройка XML-веб-службы для проверки подлинности с помощью сертификата клиента

  1. В следующем списке приведены общие сведения о способе настройке службы IIS для проверки подлинности клиентов с помощью сертификата клиента. Дополнительные сведения см. в документации по IIS.

  2. Установите SSL.

  3. Настройте веб-приложение так, чтобы оно принимало сертификаты клиентов.

  4. Измените файл конфигурации, указав в нем проверку подлинности Windows для веб-службы.

    Задайте атрибуту mode XML-элемента authentication в файле конфигурации значение "Windows". В следующем примере кода показано изменение файла конфигурации для использования проверки подлинности Windows.

    // Fragment of a Web.config file.
    <authentication mode= "Windows">
    </authentication>
    

Передача учетных данных клиента веб-службе с использованием проверки подлинности с помощью сертификата клиента

  1. Создайте новый экземпляр прокси-класса веб-службы. Если прокси-класс еще не сгенерирован, подробные сведения см. в разделе Создание прокси-класса XML-веб-службы.

  2. Создайте новый экземпляр класса X509Certificate.

  3. Вызовите метод CreateFromCertFile, чтобы загрузить сертификат клиента из файла.

    Клиент может получить файл сертификата клиента от надежного центра сертификации. Дополнительные сведения см. в документации по IIS.

  4. Добавьте объект X509Certificate в коллекцию ClientCertificates прокси-класса.

    В следующем примере кода показана передача клиентом веб-службы своих учетных данных с помощью сертификата клиента. Сертификат клиента, выданный веб-сервером, загружается из файла с помощью метода CreateFromCertFile и добавляется свойству ClientCertificates прокси-класса.

    ' Instantiate proxy class to a Bank Web service.
    Dim bank As BankSession = new BankSession()
    
    ' Load the client certificate from a file.
    Dim x509 As X509Certificate = X509Certificate.CreateFromCertFile("c:\user.cer")
    
    ' Add the client certificate to the ClientCertificates property
    ' of the proxy class.
    bank.ClientCertificates.Add(x509)
    
    ' Call the method on the proxy class, which requires authentication
    ' using client certificates.
    bank.Deposit(500)
    
    // Instantiate proxy class to a Bank Web service.
    BankSession bank = new BankSession();
    
    // Load the client certificate from a file.
    X509Certificate x509 = X509Certificate.CreateFromCertFile(@"c:\user.cer");
    
    // Add the client certificate to the ClientCertificates property
    // of the proxy class.
    bank.ClientCertificates.Add(x509);
    
    // Call the method on the proxy class, which requires
    // authentication using client certificates.
    bank.Deposit(500);
    

Пример

Когда свойству Credentials присваивается значение System.Net.CredentialCache.DefaultCredentials, клиент запрашивает у сервера проверку подлинности Kerberos и/или NTLM, в зависимости от конфигурации сервера.

В следующем примере кода задаются учетные данные клиента, переданные методу веб-службы с помощью проверки подлинности Windows.

Imports System
Imports System.Web.Services.Protocols
Imports System.Net
Imports MyMath

Public Class Calculator
   Public Shared Sub Main()
     ' Create a new instance of the proxy class to an
     ' Web service method. 
     Dim mathproxy As MyMath.Math = New MyMath.Math()
     
     ' Create a new instance of CredentialCache.
     Dim mycredentialCache As CredentialCache = New CredentialCache()

     ' Create a new instance of NetworkCredential using the client
     ' credentials.
       Dim credentials As NetworkCredential = New _          NetworkCredential(UserName,SecurelyStoredPasword,Domain)

     ' Add the NetworkCredential to the CredentialCache.
       mycredentialCache.Add(New Uri(mathproxy.Url), "Basic", _                             credentials)

     ' Add the CredentialCache to the proxy class credentials.
     mathproxy.Credentials = mycredentialCache

     ' Call the method on the proxy class.
     Dim result As Integer 
     result = mathproxy.Add(3,5)
  End Sub
End Class 
using System;
using System.Web.Services.Protocols;
using System.Net;
using MyMath;

public class Calculator
{
  public static void Main() 
  {
     // Create a new instance of the proxy class to an XML
     // Web service method. 
     MyMath.Math math = new MyMath.Math();

    // Create a new instance of CredentialCache.
    CredentialCache credentialCache = new CredentialCache();

   // Create a new instance of NetworkCredential using the client
   // credentials.
   NetworkCredential credentials = new
      NetworkCredential(UserName,SecurelyStroredPassword,Domain);

   // Add the NetworkCredential to the CredentialCache.
   credentialCache.Add(new Uri(math.Url),                        "Basic", credentials);

   // Add the CredentialCache to the proxy class credentials.
   math.Credentials = credentialCache;

     // Call the method on the proxy class.
     int result = math.Add(3,5);
  }
}

См. также

Задачи

Как выполнять нестандартную проверку подлинности с использованием заголовков SOAP

Справочник

NetworkCredential
CredentialCache
X509Certificate

Основные понятия

Безопасность XML-веб-служб, создаваемых с помощью ASP.NET

Другие ресурсы

ASP.NET Web Application Security
XML-веб-службы с использованием ASP.NET