我有一个生产服务器,我打电话给CONTOSO\MachineA ,运行SQL Server。 我有一个开发服务器,我打电话给CONTOSO\MachineB ,运行IIS。 这两个服务器都运行Windows Server 2008.我有一个域用户,我将打电话给CONTOSO\MyAppSvc 。 我有两个CNAMElogging, myapp => MachineA和myappdev => MachineB 。
我的目标是让(intranet)客户端连接到MachineB上的IIS并通过Windows身份validation进行身份validation,然后让应用程序模拟它们并以MachineA身份连接到SQL。
MachineB正在运行SQL Server的另一个实例进行testing,并且通过运行SELECT * FROM [MachineA].[My App DB].App.SomeTablevalidationSQL是否设置了正确的双跳validationSELECT * FROM [MachineA].[My App DB].App.SomeTable via SSMS (on MyWorkstation) => SQL Server (on MachineB) => SQL Server (on Machine A) 。
MyApp上IIS上的MyApp使用模拟和Windows身份validation(仅协商)进行设置,并在运行MyAppPool中运行。 system.webServer/ security/ authentication/ windowsAuthentication @useAppPoolCredentials为true, @useKernelMode为false。 MyAppSvc和MyAppSvc都被委托给无约束的委托。 MyAppSvc上有两个SPN: HTTP/myapp和HTTP/myapp.contoso.local 。
使用wireshark时,当我尝试浏览http://myapp/aPage时,看到以下http://myapp/aPage :
问题在于DNS条目是CNAMElogging而不是Alogging,而事实上SPN是为主机名称MyApp而不是机器名称MachineB 。 解决方法是将MyApp的DNS条目更改为直接指向MachineB IP地址的Alogging,或者添加SPN HTTP/MachineB和HTTP/MachineB.Contoso.local (旧的可能会被删除)。