2009-04-26 5 views
3

У меня есть веб-служба 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, так как функциональный уровень может быть повышен для целей тестирования, Остальная часть инфраструктуры довольно много работает.

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

ответ

0

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

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

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

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

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

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

+0

Основной вопрос был решен давно. Сценарий здесь с XBAP должен был быть самым простым способом воспроизвести отсутствие аутентификации, поэтому я потерял эту настройку и не могу проверить, что пошло не так с ней. Хотя теперь мне интересно, на XBAP, размещенном на части IIS: Происхождение вопроса XBAP, даже для полностью доверенных XBAP? Я признаю, что я не слишком заглянул в них, но предположил, что они вели себя как любое отдельное приложение .Net, когда дело дошло до сетей. –

Смежные вопросы