Подтвердить что ты не робот

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?

4b9b3361

Ответ 2

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

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

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