2009-11-18 2 views
2

У меня есть WCF сервера работает на IIS 6 с использованием пула приложений с пользовательской идентичностиWCF проверки подлинности Windows с IIS и пула приложений

прямо сейчас я смотрел на веб-сайте в течение двух дней, и я не могу найти точный ответ на мою проблему. Я знаю, что существует много аналогичных внешних там

В IIS6 виртуальный каталог отключен анонимным доступом и включен встроенная проверка подлинности Windows. Учетная запись службы находится в том же домене, что и машина. Я назову это svcE. Я добавил svcE в группу IIS_WPG.

Теперь, когда я выбираю этот пул приложений с svcE для работы в Virtual Directory, назовите его appDir, тогда, когда я перейду к appDir, мне будет предложено ввести учетные данные, но если я использую учетную запись сетевой службы, я не убедитесь, что я вошел в систему как я.

Что я хочу сделать, это запустить службу под учетной записью svE, поскольку она имеет доступ к базе данных, не помещая эту информацию в файл WebConfig.

У меня есть веб-службы с помощью конфигурационного файла

<authentication mode="Windows"/> 

<bindings> 
     <basicHttpBinding> 
      <binding name="default"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security>     
      </binding> 
     </basicHttpBinding> 
    </bindings> 

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="default" contract="<removed>"> 
<identity> 
    <dns value="localhost" /> 
</identity> 
</endpoint> 

Веб-конфигурации с помощью сервиса имеет

<basicHttpBinding> 
      <!-- Create one Binding for all three services, save space--> 
      <binding name="BasicHttpBinding_PricingService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows" proxyCredentialType="Windows" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 

     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="<address>.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_PricingService" 
      contract="<contract>" name="<name>" /> 

Ultimatly что я пытаюсь достичь

только для Windows Authenticated люди может вызвать услугу -> Затем служба использует учетную запись serivce для взаимодействия с базой данных.

Обратите внимание, что, если я пропустить первую часть и добавить доступ Annon то он работает и называется базой данных тонкой

Спасибо за помощь

ответ

0

Похоже, что ваша служба олицетворения пользователя, когда подключается пользователь с проверкой подлинности Windows.

Когда вы используете анонимную аутентификацию, нет никакого олицетворения, поэтому никаких проблем.

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

Try:

<authentication mode="Windows" impersonate="false"/> 
+0

Это не работает. Я также пробовал Mike

1

Если вы хотите, чтобы сделать дб вызова в качестве определенной учетной записи, вы можете выдать себя за эту учетную запись для размаха вызова:

using (WindowsImpersonationContext contexts = (new WindowsIdentity("account").Impersonate()){ db.MakeCall(); } 
0

Я была такая же проблема ,

Мне нужно было предоставить доступ к папке c: \ inetpub \ wwwroot \.

Я дал разрешение на чтение группы «DomainUsers».

0

Если кто-то все еще борется с этой проблемой, все, что вам нужно сделать, олицетворяет вашу учетную запись службы в Интернете.config:

<identity impersonate="true" userName="domain\svcname" password="password"/> 
Смежные вопросы