Проверка подлинности Windows в WCF и IIS для доступа к базе данных - PullRequest
2 голосов
/ 09 августа 2010

У меня есть служба WCF, которую я хочу использовать для доступа к базе данных SQL (в данный момент через Linq2SQL), но доверенная безопасность в живой среде IIS, похоже, не использует правильные учетные данные - я пытался следоватьсоответствующие посты здесь, но, похоже, не совсем понимаю.Я был бы очень признателен, если бы кто-то мог обнаружить мою ошибку ...

в конфигурации конечной точки, я настроил ее на использование BasicHttpBinding со следующей конфигурацией

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

IНа сервере IIS установлены параметры system.web:

<authentication mode="Windows" />
<identity impersonate="true" />

, я добавил новый AppPool, для Identity - значение ApplicationPoolIdentity, а для ManagedPipeLine - значение Integrated.В реальном веб-приложении, настроенном на мой новый AppPool, я установил для Windows Authentication «Enabled» и попробовал олицетворение ASP.Net как во включенном, так и в отключенном

Когда я пытаюсь вызвать службу WCF, она запускается, но когда он выполняет реальный вызов хранимой процедуры через Linq2SQL (в базу данных на удаленном сервере с использованием Trusted Security), я получаю следующую ошибку: Ошибка входа для пользователя ' domain \ имя_машины $ '- имя машины со знаком доллара в конце

, которое мне кажется очень похожим на то, что мне не удалось делегировать правильную идентификационную информацию (я могу получить доступ к фактической базе данных через Management Studio.

Ответы [ 2 ]

0 голосов
/ 11 августа 2010

Да, это возможно.В этом случае вам необходимо убедиться, что для вашего параметра безопасности установлено значение Windows (по умолчанию), и убедиться, что ваши службы подготовлены для олицетворения.Вы можете сделать это программно или декларативно.

Вы должны указать WCF разрешить олицетворение для требуемой службы / метода, задав соответствующий атрибут ImpersonationOption как обязательный или разрешенный.

[OperationBehavior(Impersonation=ImpersonationOption.Allowed)]

Поскольку вы обращаетесь к ресурсам по сети, вам необходимо убедиться, что уровень олицетворения установлен на делегирование, а не на олицетворение, если только ресурсы, к которым вы обращаетесь, не являются локальными.Это устанавливается на уровне поведения конечной точки клиента.

 <clientCredentials>
        <windows allowedImpersonationLevel="[Impersonation or Delegate]"/>
 </clientCredentials>
0 голосов
/ 10 августа 2010

Доступ к вашей БД не должен иметь ничего общего с вашими настройками безопасности WCF.Я бы удалил настройки безопасности из вашей конфигурации привязки, а также настройки олицетворения в system.web.Вам не нужно ни то, ни другое.

Проверьте настройки строки подключения в вашей конфигурации и убедитесь, что, если вы используете встроенную защиту Windows для доступа к вашей базе данных, у вас есть правильные разрешения для вашей базы данных.IIS попытается подключиться к вашей базе данных с использованием идентификатора, настроенного в пуле приложений, поэтому вам необходимо убедиться, что учетная запись имеет доступ.Если у вас есть именованный пользователь, убедитесь, что ваши учетные данные установлены правильно.У ConnectionStrings.com есть различные примеры того, как правильно установить это.

HTH.

Стив

...