Obter usuário conectado
-
05-07-2019 - |
Pergunta
Minha empresa tem um aplicativo grande que estamos terminando. Ele utiliza WCF como a espinha dorsal com o Active Directory para autenticação. Isso funciona perfeitamente para um dos dois sites como o modelo de autenticação é Windows e você tem que ser parte do domínio de sinal para o site. A pergunta que tenho relaciona-se com o outro site que é acessível externamente. Ele define ClientCredentials.Windows.ClientCredential para a chamada de proxy com um usuário específico / pass para representação de um usuário AD assim o pleno funcionamento do modelo de segurança. Isso tudo funciona exatamente como o esperado também.
A pergunta que tenho é, na web eu posso usar HttpContext.Current.User.Identity.Name para obter o usuário conectado no momento da peça de autenticação de formulários, mas para fazer isso eu tenho que ter certeza de uma System.Web referência existe contra a DLL eu estou trabalhando atualmente em. Nossos objetos base vêm de uma classe simplista de que não sabe sobre System.Web. Existe uma maneira de descobrir o usuário Forms que está conectado dentro desse projeto objeto de base? Tentei System.Security.Principal mas isso só me dá acesso ao contas do Windows a partir do que eu poderia dizer e não me fará nenhum bem.
Eu sei que uma opção é System.Web referência apenas e ser feito com ele, mas que soa realmente klugy a mim e não a melhor opção por isso estou esperando para algumas dicas aqui.
Solução
Thread.CurrentPrincipal.Identity
vai fazer exatamente a mesma coisa como HttpContext.CurrentContext...
Ele irá retornar a identidade associada com a corrente thread em execução, que na maioria dos casos, é o usuário conectado *.
Nota: * Se você estiver usando delegação / representação ou execução como uma conta de serviço, ele irá retornar a conta da qual a identidade sempre o fio é baixo, mas no seu caso, não soa como você está fazendo qualquer contexto identidade de comutação.
Outras dicas
Se o nome de usuário como uma string é o suficiente para você,
Environment.UserName
// Environment.UserDomainName and MachineName can also be useful
A partir MSDN :
Obtém o nome de usuário da pessoa que iniciou o segmento atual.