Использование аутентифицированных служб Windows WCF - PullRequest
3 голосов
/ 01 марта 2012

У меня есть служба WCF с проверкой подлинности Windows.

Использование следующей конфигурации:

BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

binding.SendTimeout = TimeSpan.FromMinutes(60);
binding.CloseTimeout = TimeSpan.FromMinutes(60);
binding.OpenTimeout = TimeSpan.FromMinutes(60);
binding.ReceiveTimeout = TimeSpan.FromMinutes(60);

NexumCrmServiceClient client = new NexumCrmServiceClient(binding, new EndpointAddress("http://xxxxxx:81/xxxxxxxxxxxxxx.svc"));
client.ClientCredentials.Windows.AllowNtlm = true;
//client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
client.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("xxxxxxxx", "xxxxxxxx", "xxxxxxxxx");

Я получаю эту ошибку:

Конечная точка не прослушивала http://xxxxxx:81/xxxxxxxxxxxxxxxx.svc, который может принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Увидеть InnerException, если имеется, для более подробной информации ...

И если я использую конфигурацию ниже:

BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;

binding.SendTimeout = TimeSpan.FromMinutes(60);
binding.CloseTimeout = TimeSpan.FromMinutes(60);
binding.OpenTimeout = TimeSpan.FromMinutes(60);
binding.ReceiveTimeout = TimeSpan.FromMinutes(60);

NexumCrmServiceClient client = new NexumCrmServiceClient(binding, new EndpointAddress("http://xxxxxx:81/xxxxxxxxxxxxxx.svc"));
client.ClientCredentials.Windows.AllowNtlm = true;
//client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
client.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("xxxxxxxx", "xxxxxxxx", "xxxxxxxxx");

Я получаю еще одну ошибку:

HTTP-запрос не авторизован по схеме аутентификации клиента 'Anonymous'. Заголовок аутентификации, полученный от сервера, был 'Переговоры, NTLM'.

Не могли бы вы предложить конфигурацию, которая успешно работает?

Заранее спасибо,

1 Ответ

5 голосов
/ 02 марта 2012

Полагаю, вам нужно установить:

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

, чтобы получить то, на что ссылается заголовок вашего вопроса.Кроме того, просмотрите эту статью MSDN об использовании проверки подлинности Windows с basicHttpBinding.

...