Проверка подлинности Windows WCF с IIS и пулом приложений - PullRequest
2 голосов
/ 19 ноября 2009

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

Сейчас я два дня просматриваю в Интернете и не могу найти точного ответа на мою проблему. Я знаю, что есть много подобных наружу

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

Теперь первая проблема - когда я выбираю этот пул приложений с помощью svcE для работы в виртуальном каталоге, называю его 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>" />

В конечном итоге я пытаюсь достичь

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

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

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

Ответы [ 4 ]

1 голос
/ 21 ноября 2009

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

using ( WindowsImpersonationContext contexts = (new WindowsIdentity("account").Impersonate()){ db.MakeCall(); }
0 голосов
/ 24 октября 2012

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

<identity impersonate="true" userName="domain\svcname" password="password"/>
0 голосов
/ 22 марта 2011

У меня была такая же проблема.

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

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

0 голосов
/ 19 ноября 2009

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

При использовании анонимной аутентификации нет олицетворения, поэтому нет проблем.

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

Попробуйте:

<authentication mode="Windows" impersonate="false"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...