Eu tenho vários servidores (todos no mesmo DC) em um ambiente de Intranet na minha empresa. Para simplificar, farei a minha pergunta no IIS e nos SQL Servers. Eu tenho um servidor web IIS 7.5 e um SQL Server 2005 remoto em outra máquina no domínio.
Aqui estão os meus requisitos para o que espero realizar:
select suser_sname()
deve retornar o nome de usuário real da pessoa que está executando ações para o banco de dados por meio do aplicativo da Web do IIS. Eu passei pelo menos duas semanas (cumulativamente) pesquisando isso nos últimos anos, como eu tive tempo, mas sem sucesso. Por favor, ajude-me a entender primeiro, se é possível atender a esses requisitos (como estou razoavelmente certo de que seja), aponte-me na direção correta sobre "COMO" para realizar isso e quais limitações devo considerar com essa solução.
O que eu fiz até agora:
AuthenticationType
usando o Windows Auth ativado exclusivamente. O melhor que consegui realizar foi confirmar a presença do cabeçalho http do Kerberos, mas meu aplicativo de teste revela que o usuário personalizado do Pool de Aplicativos (a conta do SPN) está sendo transmitido em vez do meu. Aqui estão os resultados do meu aplicativo de teste também se você quiser:
Result Field Description Test App Code
------ ----------------- -------------
Negotiate Page Authentication Type Page.User.Identity.AuthenticationType
<dc>\<username> Page Identity Page.User.Identity.Name
Kerberos Principal Windows Auth Type WindowsIdentity.GetCurrent().AuthenticationType
<dc>\<spnUser> Principal Windows Identity WindowsIdentity.GetCurrent().Name
<dc>\<username> HttpContext User HttpContext.Current.User.Identity.Name
<dc>\<username> Server Var "LOGON_USER" Request.ServerVariables("LOGON_USER")
<dc>\<username> Thread Current Principal Threading.Thread.CurrentPrincipal.Identity.Name