Ошибка безопасности WCF с модульным тестом VS 2008 - PullRequest
3 голосов
/ 18 октября 2008

Я проводил свой первый модульный тест Visual Studio 2008 со службой WCF и получил следующую ошибку:

Метод испытания UnitTest.ServiceUnitTest.TestMyService бросил исключение: System.ServiceModel.Security.MessageSecurityException: HTTP-запрос не авторизован с схема аутентификации клиента 'Anonymous'. Заголовок аутентификации получил с сервера был "Переговоры, NTLM. ---> System.Net.WebException: удаленный сервер вернул ошибку: (401) Несанкционированное ..

Я также получаю следующую неудачную проверку в журнале безопасности:

Ошибка входа в систему: Причина: у пользователя есть не был предоставлен запрошенный вход введите на этой машине
пользователь Имя: (учетная запись гостя в Интернете)
Домен:
Тип входа: 3
Процесс входа в систему: IIS
Пакет аутентификации:
MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Название рабочей станции:

Я размещаю службу WCF в IIS 6.0 на компьютере с Windows XP SP3. У меня проверены «Анонимный доступ» и «Встроенная проверка подлинности Windows» для виртуального каталога службы WCF.

Вот мой конфигурационный файл для сервиса:

<system.serviceModel>
    <services>
        <bindings>
            <basicHttpBinding>
                <binding name="MyBinding">
               <security mode="None" />
           </binding>
            </basicHttpBinding>
            <customBinding>
                <binding name="MyBinding">
               <transactionFlow />
                    <textMessageEncoding />
                    <httpsTransport authenticationScheme="Ntlm"/>
                </binding>
            </customBinding>
            <wsHttpBinding>
                <binding name="MyBinding">
                   <security mode="None" />
               </binding>
            </wsHttpBinding>
        </bindings>
        <service 
            behaviorConfiguration="Service1Behavior"
            name="Service1"
        >
            <endpoint 
                address="" 
                binding="wsHttpBinding"
                bindingConfiguration="MyBinding"
                contract="IService1"
            >
                <identity>
                    <dns value="localhost" />
                   </identity>
            </endpoint>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Service1Behavior">
                <serviceMetadata httpGetEnabled="true" />
                   <serviceDebug includeExceptionDetailInFaults="false" />
               </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Ответы [ 4 ]

5 голосов
/ 24 октября 2008

Мне пришлось изменить следующие конфигурации служб IIS и WCF, чтобы преодолеть исключение «Negotiate, NTLM».

Конфигурации IIS:

- Снимите флажок «Анонимный доступ» и установите флажок «Интегрированный». Проверка подлинности Windows "флажок в настройки безопасности каталога для Виртуальный каталог службы WCF.

WCF Услуги:

- реализовал basicHttpBinding и настроил basicSettingBinding настройка безопасности на Режим «TransportCredentialsOnly» и TransportClientCredentialType to "Windows"

Вот моя обновленная конфигурация службы wcf:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="windowsBasicHttpBinding">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" />
                </security>
            </binding>
       </basicHttpBinding>
    </bindings>
    <services>
        <service    
      behaviorConfiguration="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
           name="CityOfMesa.ApprovalRouting.WCFService.RoutingService"
        >
            <endpoint 
                binding="basicHttpBinding" bindingConfiguration="windowsBasicHttpBinding"
                name="basicEndPoint"    
                contract="CityOfMesa.ApprovalRouting.WCFService.IRoutingService" 
            />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior 
                name="CityOfMesa.ApprovalRouting.WCFService.RoutingServiceBehavior"
            >
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
           </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
2 голосов
/ 18 октября 2008

Когда у вас есть securityMode = "None" в вашей привязке, вы должны отключить встроенную аутентификацию.

1 голос
/ 18 октября 2008

Аутентификация по умолчанию - windows (или NTLM), поэтому вам нужно указать, что вы не хотите аутентификацию в вашем файле конфигурации.

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="myBinding">
        <security mode="None" />
      </binding>
  </bindings>
</system.serviceModel>

также добавьте этот атрибут в конечную точку

bindingConfiguration="myBinding"

Элемент привязки указывает модификации стандартного поведения wsHttpBinding.

Тогда атрибут «bindingConfiguration =" myBinding "на конечной точке говорит, что эта конечная точка должна использовать указанные нами модификации.

0 голосов
/ 24 октября 2008

Как примечание ..... Был параметр объекта групповой политики «Уровень проверки подлинности NTLM», который управлял проверкой подлинности, в результате которой модульный тест генерировал исключение «Согласовать, NTLM».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...