Как олицетворять клиент в рамках службы
Олицетворение клиента в службе Windows Communication Foundation (WCF) позволяет службе выполнять действия от имени клиента. В случае действий, для которых предусмотрены проверки списка управления доступом (ACL), таким как доступ к каталогам и файлам на компьютере или доступ к базе данных SQL Server, проверка ACL выполняется с использованием клиентской учетной записи пользователя. В данном разделе представлены основные этапы установки клиентом уровня олицетворения клиента в домене Windows. Рабочий пример см. в разделе Impersonating the Client. Дополнительные сведения олицетворении клиента см. в разделе Делегирование и олицетворение с использованием WCF.
Примечание |
---|
Если клиент и служба выполняются на одном компьютере и клиент выполняется от имени системной учетной записи (например, Local System или Network Service), клиент невозможно олицетворить, если установлен безопасный сеанс с маркерами контекста безопасности с отслеживанием состояния. WinForms или консольное приложение, как правило, выполняется от имени текущей зарегистрированной учетной записи, что позволяет олицетворить учетную запись по умолчанию. Если же клиент представляет собой страницу ASP.NET, размещенную в службах IIS 6,0 или IIS 7.0, клиент выполняется от имени учетной записи Network Service по умолчанию. Все предоставляемые системой привязки, поддерживающие защищенные сеансы, по умолчанию используют маркер контекста безопасности без отслеживания состояния. Но если клиент является страницей ASP.NET и используются защищенные сеансы с маркерами контекста безопасности с отслеживанием состояния, олицетворить клиент невозможно. Дополнительные сведения использовании маркеров контекста безопасности с отслеживанием состояния в защищенном сеансе см. в разделе Как создать маркер контекста безопасности с отслеживанием состояния для безопасного сеанса. |
Включение олицетворения клиента из кэшированного маркера Windows в службе
Создайте службу. Дополнительные сведения по этой базовой процедуре см. в разделе Учебник по началу работы.
Используйте привязку, использующую проверку подлинности Windows, и создайте сеанс, такой как NetTcpBinding или WSHttpBinding.
При создании реализации интерфейса службы примените класс OperationBehaviorAttribute к методу, требующему олицетворения клиента. Задайте для свойства Impersonation значение Required.
<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
[OperationBehavior(Impersonation=ImpersonationOption.Required)] public double Add(double a, double b) { return a + b; }
Установка допустимого уровня олицетворения на стороне клиента
Создайте код клиента службы с помощью средства Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe). Дополнительные сведения см. в разделе Обращение к службам с использованием клиента WCF.
После создания клиента WCF присвойте свойству AllowedImpersonationLevel класса WindowsClientCredential одно из значений перечисления TokenImpersonationLevel.
Примечание Для использования Delegation необходимо использовать согласованную проверку подлинности Kerberos (иногда называемую многоступенчатой или многоэтапной проверкой Kerberos). Описание этого процесса см. в разделе Рекомендации по безопасности при использовании WCF. Dim client As New CalculatorClient("CalculatorEndpoint") client.ClientCredentials.Windows.AllowedImpersonationLevel = _ System.Security.Principal.TokenImpersonationLevel.Impersonation
CalculatorClient client = new CalculatorClient("CalculatorEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
См. также
Задачи
Справочник
OperationBehaviorAttribute
TokenImpersonationLevel