У меня есть приложение 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