У меня есть рабочий сервер, который я назову CONTOSO\MachineA
, под управлением SQL Server. У меня есть сервер разработки, который я назову CONTOSO\MachineB
, под управлением IIS. Оба сервера работают под управлением Windows Server 2008. У меня есть пользователь домена, которого я назову CONTOSO\MyAppSvc
. У меня две записи CNAME, myapp => MachineA
и myappdev => MachineB
.
Моя цель - подключить клиентов (интрасети) к IIS на MachineB
и аутентификация через аутентификацию Windows, а затем для приложения, чтобы олицетворять их и подключаться к SQL на MachineA
как сами.
MachineB запускает другой экземпляр SQL Server для тестирования, и я убедился, что SQL настроен правильно для аутентификации с двойным прыжком, запустив SELECT * FROM [MachineA].[My App DB].App.SomeTable
через SSMS (on MyWorkstation) => SQL Server (on MachineB) => SQL Server (on Machine A)
.
MyApp
на IIS на MachineB
настроен с олицетворением и аутентификацией Windows (только для переговоров) и работает в MyAppPool
который работает как MyAppSvc
. system.webServer/ security/ authentication/ windowsAuthentication @useAppPoolCredentials
правда и @useKernelMode
ложно. MachineB
и MyAppSvc
оба доверяют неограниченное делегирование. Есть два SPN на MyAppSvc
: HTTP/myapp
и HTTP/myapp.contoso.local
.
Используя wirehark, я вижу следующее, когда пытаюсь просмотреть http://myapp/aPage
:
Проблема заключается в том, что запись DNS является записью CNAME, а не записью A, в сочетании с тем, что SPN настроены для имени хоста. MyApp
а не имя машины MachineB
. Решение состоит в том, чтобы либо изменить запись DNS для MyApp
к записи A, которая указывает непосредственно на IP-адрес MachineB
или добавить SPN HTTP/MachineB
и HTTP/MachineB.Contoso.local
(старые наверняка можно было удалить).