Поделиться через


Практическое руководство. Олицетворение клиента в рамках службы

Олицетворение клиента в службе Windows Communication Foundation (WCF) позволяет службе выполнять действия от имени клиента. В случае действий, для которых предусмотрены проверки списка управления доступом (ACL), таким как доступ к каталогам и файлам на компьютере или доступ к базе данных SQL Server, проверка ACL выполняется с использованием клиентской учетной записи пользователя. В данном разделе представлены основные этапы установки клиентом уровня олицетворения клиента в домене Windows. Рабочий пример см. в разделе Impersonating the Client. Дополнительные сведения о олицетворении клиента см. в разделе "Делегирование и олицетворение".

Примечание.

Если клиент и служба выполняются на одном компьютере и клиент выполняется от имени системной учетной записи (например, Local System или Network Service), клиент невозможно олицетворить, если установлен безопасный сеанс с маркерами контекста безопасности с отслеживанием состояния. WinForms или консольное приложение, как правило, выполняется от имени текущей зарегистрированной учетной записи, что позволяет олицетворить учетную запись по умолчанию. Однако если клиент является страницей ASP.NET и эта страница размещается в IIS 6.0 или IIS 7.0, то клиент выполняется под Network Service учетной записью по умолчанию. Все предоставляемые системой привязки, поддерживающие защищенные сеансы, по умолчанию используют маркер контекста безопасности без отслеживания состояния. Однако если клиент является страницей ASP.NET и безопасными сеансами с маркерами контекста безопасности с отслеживанием состояния, клиент не может быть олицетворен. Дополнительные сведения об использовании маркеров контекста безопасности с отслеживанием состояния в безопасном сеансе см. в разделе "Практическое руководство. Создание маркера контекста безопасности для безопасного сеанса".

Включение олицетворения клиента из кэшированного маркера Windows в службе

  1. Создайте службу. Дополнительные сведения по этой базовой процедуре см. в разделе Getting Started Tutorial.

  2. Используйте привязку, использующую проверку подлинности Windows, и создайте сеанс, такой как NetTcpBinding или WSHttpBinding.

  3. При создании реализации интерфейса службы примените класс OperationBehaviorAttribute к методу, требующему олицетворения клиента. Установите свойство Impersonation в значение Required.

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    
    <OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
       Implements ICalculator.Add
        Return a + b
    End Function
    

Установка допустимого уровня олицетворения на стороне клиента

  1. Создайте код клиента службы с помощью средства ServiceModel Metadata Utility Tool (Svcutil.exe). Дополнительные сведения см. в разделе "Доступ к службам с помощью клиента WCF".

  2. После создания клиента WCF задайте AllowedImpersonationLevel для свойства WindowsClientCredential класса одно из TokenImpersonationLevel значений перечисления.

    Примечание.

    Для использования Delegationнеобходимо использовать согласованную проверку подлинности Kerberos (иногда называемую многоступенчатой или многоэтапной проверкой Kerberos). Описание реализации этой функции см. в разделе "Рекомендации по обеспечению безопасности".

    CalculatorClient client = new CalculatorClient("CalculatorEndpoint");
    client.ClientCredentials.Windows.AllowedImpersonationLevel =
        System.Security.Principal.TokenImpersonationLevel.Impersonation;
    
    Dim client As New CalculatorClient("CalculatorEndpoint")
    client.ClientCredentials.Windows.AllowedImpersonationLevel = _
        System.Security.Principal.TokenImpersonationLevel.Impersonation
    

См. также