Делегирование в веб-службе WCF

У меня есть веб-служба WCF, которая в настоящее время обслуживается через конечную точку WSHttpBinding с безопасностью транспорта и типом учетных данных клиента Windows. Служба размещается поверх IIS 5.1 с SSL, настроенным с использованием сертификата центра сертификации домена. Сам IIS работает с идентификатором [email protected] на компьютере домена. Анонимный доступ отключен, и встроенная проверка подлинности Windows является единственным способом проверки подлинности.

У службы есть метод, который возвращает текущее имя удостоверения Windows и уровень олицетворения. В атрибуте OperationBehaviourAttribute для метода олицетворение установлено значение Required.

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public IEnumerable<string> GetInformation()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    return new List<string>()
    {
        identity.Name,
        identity.ImpersonationLevel.ToString()
    };
}

Я создаю канал WCF вручную в клиенте и разрешаю делегирование службы.

WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType =
    HttpClientCredentialType.Windows;

EndpointAddress endpoint =
    new EndpointAddress("https://host/DelegateService/Service.svc");

ChannelFactory<ServiceInterface.IService> cf =
    new ChannelFactory<ServiceInterface.IService>(binding, endpoint);

cf.Credentials.Windows.AllowedImpersonationLevel =
    TokenImpersonationLevel.Delegation;

ServiceInterface.IService service = cf.CreateChannel();

Клиент представляет собой полностью доверенный XBAP, подписанный сертификатом домена, который был перемещен в хранилище сертификатов доверенных издателей.

На хост-компьютере [email protected] и [email protected] в домене настроено разрешение делегирования, и ни один из пользователей не помечен как конфиденциальный. SeImpersonatePrivilege также не должен быть проблемой, поскольку олицетворение работает.

Когда клиент вызывает метод службы, метод возвращает «домен\текущий» и «олицетворение». Что мне нужно, так это «домен\текущий» и «Делегирование». Согласно второй таблице на http://msdn.microsoft.com/en-us/library/ms730088.aspx это будет означать, что клиент или служба не могут делегировать.

Домен имеет функциональный уровень Windows 2000 Mixed. Я где-то читал, что это подразумевает аутентификацию NTLM, но я полагаю, что это относится к трафику между контроллерами домена. Когда он не работает поверх https, Wireshark показывает supportedMech: 1.2.840.48018.1.2.2 (MS KRB5 - Microsoft Kerberos 5) в ответе http, поэтому кажется, что Kerberos включен.

Технически мы могли бы поднять функциональный уровень до Windows 2003, так как два контроллера домена, которые у нас есть, оба являются серверами W2K3, но ИТ-отдел в настоящее время не может выделить ресурсы для операций резервного копирования и того, что они хотят сделать, прежде чем идти и повышать функционал. уровень.

У нас есть виртуальный тестовый домен, который можно обновить до функционального уровня Windows Server 2003, но в этом домене отсутствует центр сертификации или клиентские компьютеры с установленным IIS, поэтому функциональный уровень может быть повышен для целей тестирования, настройки остальной инфраструктуры. довольно много работы.

Это проблема, которую я не мог решить в течение некоторого времени. Интернет, кажется, полон статей типа «Вот как вы это делаете», но мне не повезло с ними. Есть идеи, что не так?


person Mikko Rantanen    schedule 26.04.2009    source источник


Ответы (1)


Вы используете XBAP и службу на одном хосте IIS?

Если я правильно понял - у вас есть: client->XBAP->WCF.

Клиент подключается к XBAP, размещенному в IIS. Это может быть аутентификация через Kerberos, и вы, кажется, предполагаете, что это так.

Второй прыжок — это подключение XBAP к службе WCF. Если эти два хоста размещены на одном хосте IIS, Kerberos не будет использоваться, и будет использоваться NTLM. Kerberos будет только использоваться, если WCF находится на другом хост-компьютере.

Если у вас есть XBAP и WCF, размещенные на отдельных серверах, то у вас есть классическая настройка аутентификации Kerberos поверх 2-го перехода, и любая из статей типа «Вот как вы это делаете» должна объяснять это.

(Я понимаю, что этот вопрос был некоторое время назад, но я только недавно нашел его и только недавно пришел к пониманию проблем Kerberos и 2-х прыжков.)

person Grhm    schedule 24.12.2010
comment
Основная проблема была решена некоторое время назад. Сценарий здесь с XBAP должен был быть самым простым способом воспроизвести отсутствие аутентификации, поэтому я потерял эту настройку и не могу проверить, что с ней пошло не так. Хотя теперь мне интересно узнать о XBAP, размещенном на стороне IIS: происхождение XBAP имеет значение даже для полностью доверенных XBAP? Я признаю, что не слишком углублялся в них, но предположил, что они ведут себя как любое отдельное приложение .Net, когда дело доходит до сети. - person Mikko Rantanen; 26.12.2010