Ошибка WCF: вызывающая сторона не была аутентифицирована службой - PullRequest
43 голосов
/ 12 ноября 2008

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

Звонящий не был аутентифицирован услуга

Я использую wsHttpBinding. Я не уверен, какую аутентификацию ожидает служба?



<behaviors>
  <serviceBehaviors>
    <behavior name="MyTrakerService.MyTrakerServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Обновление Это работает, если я изменяю привязку на <endpoint "basicHttpBinding" ... /> (из wsHttpBinding) на хостинге IIS 7.0, windows 2008 server

Ответы [ 11 ]

25 голосов
/ 12 ноября 2008

Если вы используете basicHttpBinding, настройте безопасность конечной точки на «Нет» и перенесите clientCredintialType на «Нет».

<bindings>
    <basicHttpBinding>
        <binding name="MyBasicHttpBinding">
            <security mode="None">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint 
            binding="basicHttpBinding" 
            bindingConfiguration="MyBasicHttpBinding"
            name="basicEndPoint"    
            contract="IMyService" 
        />
</service>

Кроме того, убедитесь, что в разделе Методы проверки подлинности в IIS включен анонимный доступ

23 голосов
/ 26 февраля 2009

Я понял.

Если вы хотите использовать wshttpbinding, вам нужно добавить учетные данные Windows, как показано ниже.

svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";

спасибо

4 голосов
/ 12 ноября 2008

Вы пытались использовать basicHttpBinding вместо wsHttpBinding? Если не требуется никакой аутентификации и реализации Ws- * не требуются, вам, вероятно, будет лучше с простой старой basicHttpBinding. WsHttpBinding реализует WS-Security для защиты и аутентификации сообщений.

2 голосов
/ 21 октября 2009

установить анонимный доступ в вашем виртуальном каталоге

написать следующие учетные данные к вашим услугам

ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";

после этого вы вызываете методы веб-сервиса.

1 голос
/ 08 апреля 2016

Мне удалось решить общую проблему, выполнив следующие действия:

  1. Перейти к IIS -> Сайты -> Ваш сайт ->
  2. Панель просмотра функций -> Аутентификация
  3. Установить Анонимная аутентификация на Отключено
  4. Установить Аутентификация Windows на Включено

enter image description here

1 голос
/ 04 ноября 2013

Если вы используете собственный хостинг, такой как я, способ избежать этой проблемы (как описано выше) заключается в том, чтобы на стороне хоста и клиента было оговорено, что режим безопасности wsHttpBinding = NONE.

При создании привязки как на клиенте, так и на хосте вы можете использовать этот код:

 Dim binding as System.ServiceModel.WSHttpBinding 
 binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)

или

 System.ServiceModel.WSHttpBinding binding
 binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
0 голосов
/ 19 июля 2018

У меня тоже была такая же проблема в wsHtppBinding. И мне просто нужно было добавить режим security, указывающий на none, что решило мою проблему и не нужно переключаться на basicHttpBinding. Проверьте здесь и проверьте, как отключить безопасность WCF. Проверьте приведенное ниже изменение конфигурации для справки:

<wsHttpBinding>
    <binding name="soapBinding">
        <security mode="None">
            <transport clientCredentialType="None" />
            <message establishSecurityContext="false" />
        </security>
    </binding>
</wsHttpBinding>
0 голосов
/ 17 мая 2016

Это может быть вызвано, если клиент находится в другом домене, чем сервер.

Я столкнулся с этим при тестировании одного из моих приложений с моего ПК (клиента) на мой (облачный) сервер тестирования, и самое простое решение, о котором я мог подумать, - это настройка vpn.

0 голосов
/ 27 февраля 2016

если необходимо указать домен (который идентифицирует имя пользователя и пароль, которые использует клиент) в webconfig, вы можете указать это в разделе службы service.serviceModel:

<identity>          
<servicePrincipalName value="example.com" />
</identity>

и в клиенте укажите домен, имя пользователя и пароль:

 client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
 client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
 client.ClientCredentials.Windows.ClientCredential.Password = "Password";
0 голосов
/ 04 ноября 2013

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

...