Делегирование в веб-сервисе WCF - PullRequest
3 голосов
/ 26 апреля 2009

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

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

На главном компьютере test@domain.com и current@domain.com в домене настроена функция Allow Delegation, и ни один из пользователей не помечен как конфиденциальный. 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, поэтому функциональный уровень можно повысить в целях тестирования, настраивая rest. из инфраструктуры довольно много работы.

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

1 Ответ

0 голосов
/ 24 декабря 2010

Запускаете ли вы XBAP и службу на одном хосте IIS?

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

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

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

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

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

...