2009-09-02 3 views
2

мы написали службу WCF, развернутую в IIS. мы выбрали встроенную проверку подлинности Windows. сервис не может быть использован в этом случае, но если мы можем установить метод аутентификации виртуального каталога IIS на «Анонимный» для служб WCF, ошибка исчезнет. Но «Анонимный» неприемлем для нашей службы WCF. Для аутентификации клиента нам необходимо использовать встроенную проверку подлинности Windows. Кто-нибудь знает, как решить эту проблему?Служба WCF, аутентификация Windows

Спасибо заранее,

Ашиша

+0

Вы можете показать, какие файлы конфигурации отображают конфигурацию клиента и службы wcf? – CSharpAtl

ответ

1

Есть две основные вещи, которые вы должны следить за:

  1. Согласован конфигурация: IIS, web.config (System.Web и WCF)
  2. Является ли ваш клиент отправляет данные проверки подлинности Windows по запросу

Скорее всего, это вторая проблема. В журнале IIS должен быть указан тот пользователь, который выполняет вызов.

+0

На самом деле, если я разрешаю интегрированную проверку подлинности Windows, без анонимного, тогда клиентское оконное приложение не сможет получить доступ к самому сервису, даже на сервере, если я просматриваю службу, он показывает мне следующую ошибку: «Параметры безопасности для этой службы требуют аутентификации« Анонимный » но он не включен для приложения IIS, на котором размещена эта служба ». – Kasma

5

Вы должны сделать несколько вещей:

  • Снимите флажок анонимный доступ с вашего виртуального forlder и проверить Комплексную безопасность окна.
  • Создайте следующую конфигурацию связывания:

    <basicHttpBinding> 
    <binding name="Binding1"> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Windows" /> 
        </security> 
    </binding> 
    </basicHttpBinding> 
    
  • Применить вышеуказанную конфигурацию к вашим услугам и Mex:

    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IService"> 
    </endpoint> 
    
    
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="IMetadataExchange"> 
    </endpoint> 
    
    • Создать клиента и использовать NetworkCredential передать свои полномочия:

       ServiceReference.MyClient proxy = new ServiceReference.MyClient(); 
           proxy.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MACHINENAME\\USERACCOUNT", "passwrd"); 
           proxy.YourServiceOperation(); 
      

Есть и другие способы, чтобы установить имя пользователя & пароль indivdually, но он не работает в .NET 4.0. USERACCOUNT - это учетная запись домена или LDAP, к которой подключен ваш хост-компьютер WCF. Если сервер не подключен к домену, тогда создайте учетную запись локально, запустив «lusrmgr.msc»