2010-08-09 5 views
2

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

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

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

Я установил настройки System.Web для:

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

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

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

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

+0

такой же проблема. сообщите мне, если вы помните, как вы его решили. – morpheus

ответ

0

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

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

HTH.

Steve

+0

Hi Steve, Я слышал, что вы говорите, но мое требование к этому приложению - подключиться к базе данных, используя идентификатор пользователя, делающего запрос, а не общий идентификатор из appPool. Это возможно? Я всегда делал это с использованием идентификатора appPool раньше, но этот проект имеет это требование (так что это может быть больше, чем IIS, чем WCF). – TobyEvans

0

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

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

[OperationBehavior(Impersonation=ImpersonationOption.Allowed)] 

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

<clientCredentials> 
     <windows allowedImpersonationLevel="[Impersonation or Delegate]"/> 
</clientCredentials> 
+0

Привет Тоби. Как вы попали на? – stephenl

+0

Привет, Стив - только от отпусков, я дам вам знать, как это получилось. Я тейк, мне не хватало первой настройки ... ура – TobyEvans

 Смежные вопросы

  • Нет связанных вопросов^_^