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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top