Мне нужно вызвать службу WCF программно. Служба может быть размещена с аутентификацией NTLM или Kerberos и должна работать в любом из них. То есть, если подключение к службе через Kerberos не удается, она должна вернуться к NTLM.
Вот код, который я использую для проверки подлинности Kerberos (при необходимости, служба размещена в SharePoint 2010 и вызывается из веб-часть):
public static SiteMembershipSvc.SiteMembershipServiceClient InitialiseSiteMembershipService(string url)
{
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
url = url.EndsWith("/") ? url + SiteMembershipAddress : url + "/" + SiteMembershipAddress;
var endpoint = new EndpointAddress(url);
var proxy = new SiteMembershipSvc.SiteMembershipServiceClient(binding, endpoint);
proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
return proxy;
}
Вызов метода на прокси-сервере при запуске в среде NTLM дает ошибку: схема аутентификации клиента «Переговоры». Заголовок аутентификации полученный с сервера был "NTLM".
Примечание: URL-адрес может находиться в другом веб-приложении на другом сервере. Я не могу проверить, с какой аутентификацией работает веб-приложение веб-части, и предполагаю, что она такая же, как и в месте, где размещена служба WCF.
Как я могу (автоматически или вручную) обеспечить возврат аутентификации с Kerberos обратно к NTLM в случае сбоя ?
Обновление:
Как уже упоминалось, ошибка аутентификации возникает при вызове веб-метода. Однако я не хочу ждать так долго, поскольку в сервисе есть несколько веб-методов, вызываемых из разных мест. Я хотел бы протестировать аутентификацию в точке, где настроен прокси (в приведенном выше фрагменте кода).
Я пробовал использовать proxy.Open ()
, но это не похоже на вызвать отказ.