Intereting Posts
Первичные ключи в Oracle и SQL Server Тип данных SQL Server varchar (MAX) в delphi с использованием RemObjects Выполните поиск и замену на тысячи файлов Word, хранящихся в столбце varbinary базы данных SQL Server DB Выбор SQL Server с несколькими группировками Получить имена таблиц, созданных в определенную дату Изменение стандартного «Обработанных xx общих записей» для сценариев SQL-данных Преобразование всех дочерних тегов в одну колонку с несколькими разделителями -SQL-сервер (2) Как найти каталог данных для экземпляра SQL Server? Вычисление и сравнение даты в SQL Server Как использовать параметр SqlCommand для указания имени схемы для запроса выбора Почему присоединяется к select top N из представления намного быстрее, чем присоединяется только к представлению? C # Windows Service SqlCommand Hangs В EF Code First есть аннотация данных для поля описания? Неправильно ли использовать одну таблицу столбцов с номинальной стоимостью как ПК? «IllegalArgumentException произошло при вызове setter для свойства» из sqlserver numeric в java-объект

Kerberos double-hop в ASP.NET 4.0 и SQL2008R2

У меня есть приложение ASP.NET 4.0, в котором мне нужно переслать аутентификацию в базу данных. Для целей этого запроса на помощь, позвоните на веб-сервер «app1» и сервер базы данных «sql1».

Служба базы данных SQL2008R2 работает как именованный экземпляр «SQL2008R2» под учетной записью пользовательского домена «SqlServer». Сервер работает под управлением Windows Server 2008 R2 Enterprise Edition. Я создал SPN для этого …

setspn -a MSSQLSvc/sql1.mydomain.local:SQL2008R2 SqlServer 

Приложение ASP.NET работает под пулом приложений с использованием пользовательской учетной записи домена «WebApplicationUser» в режиме Integrated Pipeline. В настоящее время он работает на моем ноутбуке под управлением Windows 7 Enterprise, но в конечном итоге будет размещен в Windows Server 2008 R2 Standard Edition. Я создал 2 SPN для приложения (на машине Windows 7, с которой я в настоящее время работает) …

 setspn -a http/app1 WebApplicationUser setspn -a http/app1.mydomain.local WebApplicationUser 

Внутри пользователей Active Directory и компьютеров я выбрал учетную запись «WebApplicationUser», и я включил принудительное делегирование в «MSSQLSvc / sql1.mydomain.local: SQL2008R2» с использованием любого протокола (я также пытался использовать только Kerbero).

Приложение настроено в IIS 7.5, и для аутентификации установлено запрещение Anonymouse, Basic, Digest и Forms при включении «олицетворения ASP.NET» и «Windows». Аутентификация Windows отключена «Расширенная защита» и включена «Проверка подлинности в режиме ядра». Поставщики являются «Negotiate» и «NTLM» в этом порядке.

Приложение ASP.NET использует EF, а строка подключения настроена на использование интегрированной безопасности …

 <connectionStrings> <add name="MyContext" connectionString="metadata=res://*/Data.MyModel.csdl|res://*/Data.MyModel.ssdl|res://*/Data.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=sql1.mydomain.local\sql2008r2;Initial Catalog=MyDatabase;Persist Security Info=false;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> 

Моя веб-конфигурация определяет как проверку подлинности Windows, так и олицетворение, так как я использую async-страницы, я также включил политику inpersonation …

 <runtime> <alwaysFlowImpersonationPolicy enabled="true" /> </runtime> <system.web> <authentication mode="Windows" /> <identity impersonate="true" /> </system.web> 

Если я вхожу локально (на «web1») и просматриваю приложение (используя IE), все это работает, но это не связано с двойным хопом, который я пытаюсь решить.

Если я вхожу на другой компьютер, а затем просматриваю приложение с помощью IE или просматриваю с локального компьютера с помощью FireFox, это не сработает – обратите внимание: FireFox запрашивает данные для входа. Соединение с базой данных завершается с ошибкой «Ошибка входа в систему для пользователя» NT AUTHORITY \ ANONYMOUS LOGON »

В отличие от многих статей (и здесь может быть частью проблемы), я не использую какой-либо пользовательский код для олицетворения пользователя. Я понимаю, что олицетворение будет применяться по всем направлениям к приложению с помощью настроек web.config выше. Все, что я делаю, – это открыть соединение, а затем закрыть его, когда я закончу его.

Я, очевидно, пропустил шаг (или два), но посмотрев всю документацию, которую я могу найти (и было много), я все еще не могу найти, что это за шаг. Это не помогает, что 99% документации, которую я могу найти, фактически связаны с IIS6 и Windows 2003, но принципы должны оставаться неизменными.

Кто-нибудь преуспел в том, чтобы настроить такую ​​конфигурацию на Windows 7 и / или Windows Server 2008?

Solutions Collecting From Web of "Kerberos double-hop в ASP.NET 4.0 и SQL2008R2"

Когда вы настраиваете SPN для SQL Server, мы обнаружили, что нам нужно включить PORT, на котором Слушает SQL Server (1433).

Вы должны загрузить и использовать инструмент DelegConfig v2 от Brian Booth, чтобы помочь вам настроить правильные параметры конфигурации. http://blogs.iis.net/brian-murphy-booth/archive/2009/04/22/delegconfig-v2-beta.aspx

Это будет в основном держать вас за руку в процессе. Мы нашли инструмент неоценимым.