У меня есть веб-служба WCF, в настоящее время обслуживаемая конечная точка WSHttpBinding с защитой транспорта и типом учетных данных клиента Windows. Служба размещается поверх IIS 5.1 с помощью SSL, настроенного с использованием сертификата из центра сертификации домена. IIS сам работает с идентификатором [email protected] на компьютере домена. Анонимный доступ отключен, а встроенная проверка подлинности Windows - единственный способ аутентификации.Делегирование в веб-службе WCF
У службы есть метод, который возвращает текущее имя пользователя и уровень олицетворения. Этот метод имеет значение «Олицетворение», которое требуется в его OperationBehaviourAttribute.
[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, подписанным с сертификатом домена, который был перемещен в хранилище сертификатов Trusted Publishers.
Хост-компьютер, [email protected] и [email protected] имеют разрешение делегирования в домене, и ни один из пользователей не отмечен как чувствительный. Параметр SeImpersonatePrivilege не должен быть проблемой, так как работает олицетворение.
Когда клиент вызывает метод службы, метод возвращает «domain \ current» и «Impersonation». То, что мне требуется, это «domain \ current» и «Delegation». Согласно второй таблице в http://msdn.microsoft.com/en-us/library/ms730088.aspx это означает, что клиент или услуга не могут делегироваться.
Домен имеет функциональный уровень Windows 2000 смешанный. Я где-то читал, что это подразумевает аутентификацию 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, так как функциональный уровень может быть повышен для целей тестирования, Остальная часть инфраструктуры довольно много работает.
Это проблема, которую я не смог решить в течение некоторого времени. Кажется, что в Интернете полно статей «Вот как вы это делаете», но мне не повезло с ними. Какие-нибудь идеи, что не так?
Основной вопрос был решен давно. Сценарий здесь с XBAP должен был быть самым простым способом воспроизвести отсутствие аутентификации, поэтому я потерял эту настройку и не могу проверить, что пошло не так с ней. Хотя теперь мне интересно, на XBAP, размещенном на части IIS: Происхождение вопроса XBAP, даже для полностью доверенных XBAP? Я признаю, что я не слишком заглянул в них, но предположил, что они вели себя как любое отдельное приложение .Net, когда дело дошло до сетей. –