Проверка подлинности Windows не работает - ORA-01017: неверное имя пользователя / пароль; вход запрещен - PullRequest
1 голос
/ 11 августа 2011

У меня есть приложение silverlight, которое извлекает данные из службы WCF, размещенной в службе Windows, которая работает под учетной записью «Локальная система», т.е. NT AUTHORITY / SYSTEM.

Я включил проверку подлинности Windows для этой службы WCFиспользуя нижеприведенное в моем App.config

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="webHttpBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="defaultServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>           
  <basicHttpBinding>
    <binding name="winAuthBasicHttpBinding" openTimeout="05:00" sendTimeout="05:00" >
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<services>
  <service behaviorConfiguration="defaultServiceBehavior" name="DataService.CrossDomainService">
    <endpoint address="" behaviorConfiguration="webHttpBehavior" binding="webHttpBinding" contract="DataService.ICrossDomainService">
      <identity>
        <dns value="107.0.0.12"/>
      </identity>
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://107.0.0.12:2035/"/>
      </baseAddresses>
    </host>
  </service>
  <service behaviorConfiguration="defaultServiceBehavior" name="DataService.NewDataService">        
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="winAuthBasicHttpBinding" contract="DataService.INewDataService">
      <identity>
        <dns value="107.0.0.12"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://107.0.0.12:2035/DataService/"/>
      </baseAddresses>
    </host>
  </service>
</services>

Я также включил проверку подлинности Windows в строке подключения для Oracle, используя встроенную защиту = SSPI, как показано ниже:

<connectionStrings>    
<add name="netTiersConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=107.0.0.17)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SVC001)));Integrated Security=SSPI; Min Pool Size= 1; Max Pool Size= 5;" />    

Теперь, когда приложение Silverlight выполняет вызов к службе WCF, соединение с базой данных происходит с использованием учетной записи NT AUTHORITY / SYSTEM вместо учетных данных имени домена / имени пользователя вошедшего в систему пользователя в приложении Silverlight, которое само использует WindowsАутентификация.Следовательно, я получаю неверное имя пользователя.

Те же конфигурации отлично работают, когда я размещаю службу WCF в консольном приложении.Но когда я размещаю службу Windows, она запускается под учетной записью локальной системы, и, следовательно, я предполагаю эту проблему.

Что я могу сделать, чтобы соединение с базой данных осуществлялось с использованием учетных данных Windows для аутентификации вошедшего в систему пользователя, а не учетной записи локальной системы?

Спасибо, Pankaj Chamria

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Я нашел ответ благодаря ответу на CodeProject .. (см. здесь & здесь )

Мне просто нужно было принудительно выдать себя за каждую функцию службы WCF, которая выполняла вызов базы данных Oracle. Способ сделать это - добавить атрибут ниже в каждую реализацию OperationContract.

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
0 голосов
/ 11 августа 2011

Возможный подход состоит в том, чтобы запустить службу WCF с IIS и настроить ее для олицетворения:

<configuration>
  <system.web>
    <identity impersonate="true" />
  </system.web>
</configuration>

Я не могу сказать вам, можете ли вы добиться того же с помощью службы Windows.

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