WCFTestClient HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Anonymous».

Я создал одну службу WCF и развернул ее на сервере. Когда я просматриваю этот сервис, он дает мне положительный ответ с? Wsdl URL. Сейчас я пытаюсь протестировать сервис через тестовый клиент WCF. Это показывает правильные метаданные. Но когда я пытаюсь вызвать какой-либо метод из сервиса, он показывает мне исключение ... вот подробности ошибки с трассировкой стека ...

The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate,NTLM'.

Трассировка стека сервера:

at
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory factory)
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Negotiate,NTLM'.

Трассировка стека сервера:

at
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory factory)

Привязки клиента:

<code><bindings>
    <wsHttpBinding>
        <binding name="WSHttpBinding_IServiceMagicService" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
            allowCookies="false">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
            <security mode="None">
                <transport clientCredentialType="Windows" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="Windows" negotiateServiceCredential="true"
                    establishSecurityContext="true" />
            </security>
        </binding>
    </wsHttpBinding>
</bindings>
</code>

Привязки к серверу:

<code><bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_SEOService" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="None">
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />
      </security>
    </binding>
    <binding name="WSHttpServiceMagicBinding" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000"/>
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
      <security mode="None">
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
</code>

Клиентский раздел клиента:

<code><client>
    <endpoint address="http://hydwebd02.solutions.com/GeoService.Saveology.com/ServiceMagicService.svc"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IServiceMagicService"
        contract="IServiceMagicService" name="WSHttpBinding_IServiceMagicService" />
</client>
</code>

Секция обслуживания сервера:

<code><services>
    <service behaviorConfiguration="GeoService.Saveology.com.CityStateServiceProviderBehavior"
    name="GeoService.Saveology.com.CityStateServiceProvider">
    <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_SEOService"
        contract="SEO.Common.ServiceContract.ICityStateService" />
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
        contract="IMetadataExchange" />
    </service>
    <service behaviorConfiguration="GeoService.Saveology.com.ServiceMagicServiceProviderBehavior"
    name="GeoService.Saveology.com.ServiceMagicServiceProvider">
    <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpServiceMagicBinding" 
        contract="SEO.Common.ServiceContract.IServiceMagicService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />
    </service>
</services>
</code>
 John Saunders25 июн. 2009 г., 15:53
Что происходит, когда вы вызываете эти методы на реальном клиенте?
 user8261326 июн. 2009 г., 11:02
Я также опубликовал раздел <client> клиента и раздел <services> сервера dn.
 user8261326 июн. 2009 г., 11:02
С реальным клиентом это работает без единой проблемы.
 marc_s25 июн. 2009 г., 16:40
Хорошо, спасибо - но вам также нужно опубликовать раздел <services> сервера и раздел <client> клиента, чтобы мы увидели, как эти конечные точки настроены и как вы их вызываете ..... .
 Thibault D.10 мар. 2016 г., 14:53
Для мира .Net симптоматично то, что вы получаете так много (действительных) разных ответов на один и тот же вопрос, и ни один не объясняет, на какие параметры вы меняете и почему. Кто-нибудь понимает, что он делае

Ответы на вопрос(9)

proxy.ClientCredentials.Windows.AllowedImpersonationLevel =   
          System.Security.Principal.TokenImpersonationLevel.Impersonation;

Custom UserNamePasswordValidator (не требуется учетная запись Windows, SQLServer или ActiveDirectory - ваш UserNamePasswordValidator может иметь жестко закодированные имя пользователя и пароль или считывать их из текстового файла, MySQL или любого другого). @ HTT IIS7 .net 4.0

Мой сайт управляется через DotNetPanel. Он имеет 3 варианта безопасности для виртуальных каталогов:

Разрешить анонимный доступ Включить базовую аутентификацию Включить встроенную проверку подлинности Windows

Требуется только «Разрешить анонимный доступ» (хотя одного этого недостаточно).

Настройка

proxy.ClientCredentials.Windows.AllowedImpersonationLevel =  System.Security.Principal.TokenImpersonationLevel.Impersonation;

В моем случае ничего не изменилось.

Однако использование этой привязки сработало:

      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Windows" />
        <message clientCredentialType="UserName" />
      </security>        

после развертывания нашего сервиса, вызывающего внешний сервис в промежуточной среде в Azure. Локальная служба без ошибок вызвала внешнюю службу, но после развертывания - нет.

В итоге оказалось, что внешняя служба имеет проверку IP. Новая среда в Azure имеет другой IP-адрес, и он был отклонен.

Так что если ты когда-нибудь получишь эту ошибку при вызове внешних служб

Это может быть ограничение IP.

в которую я звонил, но я получил ту же ошибку. Мне удалось исправить мой клиент следующим образом.

В конфиге настройте режим безопасности:

<security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
  <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>

В коде установите прокси-класс, чтобы разрешить олицетворение (я добавил ссылку на службу под названием customer):

Customer_PortClient proxy = new Customer_PortClient();
proxy.ClientCredentials.Windows.AllowedImpersonationLevel =    
         System.Security.Principal.TokenImpersonationLevel.Impersonation;
 Stefan Steiger23 сент. 2011 г., 14:52
Если вы делаете это программно, убедитесь, что вы используете Dim-привязку As New System.ServiceModel.BasicHttpBinding () вместо Dim-привязки As New System.ServiceModel.WSHttpBinding ()
 Nathan31 янв. 2013 г., 18:12
Я действительно не знаю, что такое Customer_PortClient, но настройка режима безопасности помогла мне.
 Ben Cottrell22 авг. 2016 г., 12:55
Когда используешь<security mode="TransportCredentialOnly"> кажется, что вам не нужно включать конфигурацию для защиты сообщений; SOAP-сообщение отправляется в незашифрованном виде.<message> тег, кажется, игнорируется, поэтому он не приносит никакого вреда, просто он не нужен. Источник: Msdn.microsoft.com / EN-US / библиотека / ff648505.aspx
 Juan Ruiz de Castilla08 июл. 2015 г., 23:06
Отлично, спасибо.
 nldev21 окт. 2014 г., 14:57
Часть безопасности сделала свое дело и для меня!

отсюд:

WSHttpBinding попытается выполнить внутреннее согласование на уровне SSP. Чтобы это было успешным, вам нужно разрешить анонимность в IIS для VDir. WCF тогда будет по умолчанию выполнять SPNEGO для учетных данных окна. Разрешение анонимного доступа на уровне IIS не позволяет никому входить, оно откладывается в стек WCF.

Я нашел это через:http: //fczaja.blogspot.com/2009/10/http-request-is-unauthorized-with.htm

После поиска в Google:http: //www.google.tt/#hl=en&source=hp&q=+The+HTTP+request+is+unauthorized+with+client+authentication+scheme+%27Anonymou

 Marcelo Finki16 апр. 2014 г., 23:54
Hi @ Ирвин, спасибо за ответ. Не могли бы вы предоставить аудитору более «официальный» источник, например оригинальную документацию, подготовленную Microsoft, для меня? БОЛЬШОЕ СПАСИБО!! Marcelo

и я попробовал все предложенное выше. Затем я попытался изменить clientCreditialType на Basic, и все работало нормально.

<basicHttpBinding>
    <binding name="BINDINGNAMEGOESHERE" >
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Basic"></transport>
      </security>
    </binding>
  </basicHttpBinding>

которое я нашел. Возможно, не ответил на точный вопрос OP, но может помочь другим, кто наткнулся на это сообщение об ошибке.

Я создавал свой клиент в коде, используя WebHttpBinding, чтобы повторить следующую строку:

<security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" proxyCredentialType="Windows" />
</security>

Мне нужно было сделать:

var binding = new WebHttpBinding(WebHttpSecurityMode.TransportCredentialOnly);
                binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
                binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Windows;

как и настройкаproxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

 CompanyDroneFromSector7G16 мар. 2015 г., 13:12
Отличный совет, спасибо! Понятия не имею, почему за это проголосовали.

как показано ниже

client.ClientCredentials.UserName.UserName = @ "Домен \ имя пользователя"; client.ClientCredentials.UserName.Password = "пароль";

отает просто отлично). Я изменяю свою конфигурацию в IIS, чтобы разрешить анонимный доступ, и ввожу свои имя и пароль как учетные данн

Не самый лучший способ, я уверен, но он работает в целях тестирования.

 David Brunelle06 сент. 2018 г., 04:24
Я постараюсь найти его, но это сообщение от 7 лет назад, поэтому я не знаю, найду ли я его ...
 Spidi's Web05 сент. 2018 г., 07:38
Можете ли вы поделиться фрагментом кода для того же здесь?

Ваш ответ на вопрос