Eu tenho um servidor de produção, que chamarei CONTOSO\MachineA
, executando o SQL Server. Eu tenho um servidor de desenvolvimento, que eu vou chamar CONTOSO\MachineB
, executando o IIS. Ambos os servidores estão executando o Windows Server 2008. Eu tenho um usuário de domínio, que chamarei de CONTOSO\MyAppSvc
. Eu tenho dois registros CNAME, myapp => MachineA
e myappdev => MachineB
.
Meu objetivo é fazer com que os clientes (de intranet) se conectem ao IIS em MachineB
e autenticação via autenticação do Windows e, em seguida, que o aplicativo represente e conecte-se ao SQL em MachineA
como eles próprios.
O MachineB está executando outra instância do SQL Server, para testes, e verifiquei que o SQL está configurado para a autenticação de salto duplo executando SELECT * FROM [MachineA].[My App DB].App.SomeTable
via SSMS (on MyWorkstation) => SQL Server (on MachineB) => SQL Server (on Machine A)
.
MyApp
no IIS em MachineB
é configurado com Representação e Autenticação do Windows (somente negociação) e em execução em MyAppPool
, que está sendo executado como MyAppSvc
. system.webServer/ security/ authentication/ windowsAuthentication @useAppPoolCredentials
é verdadeiro e @useKernelMode
é falso. MachineB
e MyAppSvc
são confiáveis para delegação sem restrições. Existem dois SPNs em MyAppSvc
: HTTP/myapp
e HTTP/myapp.contoso.local
.
Usando o wireshark, vejo o seguinte quando tento navegar em http://myapp/aPage
:
- MyWorkstation = > MachineB
- GET / aPage
- Anfitrião: myapp
- MachineB = > MyWorkstation
- 401 Não autorizado
- Autenticar a WWW: negociar
- MyWorkstation = > MachineB
- GET / aPage
- Anfitrião: myapp
- Autorização: ticket:
- reino: CONTOSO.LOCAL
- sname: HTTP / MachineB.Contoso.local
- MachineB = > MyWorkstation
- 401 Não autorizado
- Autenticar-se na WWW:
- código de erro: ERR-MODIFIED
- reino: CONTOSO.LOCAL
- sname: MyAppSvc