Pergunta

Temos um aplicativo ASP.NET que gerencia seu próprio banco de dados de usuários, funções e permissões e recentemente adicionamos um campo à tabela Usuário para manter a conta de domínio do Windows.

Eu gostaria de fazer isso para que o usuário não precise fisicamente faça login em nosso aplicativo, mas será conectado automaticamente com base na conta de domínio do Windows atualmente conectada DOMÍNIO \ nome de usuário.Queremos autenticar a conta de domínio do Windows em nossa própria tabela de usuários.

Isso é muito fácil de fazer em Windows Forms. É possível fazer isso em Web Forms?

Não quero que o usuário receba uma tela de desafio do Windows, quero que nosso sistema lide com o login.

Esclarecimento:Estamos usando nosso próprio objeto Principal personalizado.

Esclarecimento:Não tenho certeza se isso faz diferença ou não, mas estamos usando o IIS7.

Foi útil?

Solução

Eu fiz exatamente o que você queria fazer há alguns anos.Estou tentando encontrar algum código para isso, embora tenha sido em um trabalho anterior, então esse código está em casa.

Eu me lembro, embora eu tenha usado Este artigo como meu ponto de partida.Você configura o provedor LDAP para poder executar uma verificação do usuário em relação ao LDAP.Uma coisa a ter certeza se você tentar a abordagem LDAP.No arquivo de configuração onde você configurou o LDAP, certifique-se de que o LDAP esteja em letras maiúsculas; caso contrário, não será resolvido.

Outras dicas

A integração desse tipo está no nível do servidor, é o IIS que decide que o usuário não está logado;e é o IIS que envia de volta o prompt de autenticação ao usuário, ao qual o navegador reage.

Como você deseja usar o login do domínio, só há uma maneira de fazer isso; autenticação integrada do Windows.Isso só funcionará se o servidor IIS também fizer parte do domínio e os usuários estiverem acessando a máquina diretamente, não através de um proxy, e de máquinas que também fazem parte do domínio (com os usuários devidamente logados).

No entanto, seu objeto principal personalizado pode criar diversão e jogos;a autenticação desse tipo será WindowsPrincipal e WindowsIdentity;que você pode acessar através do objeto User (veja Como:Use a autenticação do Windows no ASP.NET 2.0)

Presumo que você queira um principal personalizado por causa de suas funções personalizadas.Duvido que você consiga fazer os dois jogarem bem;você poderia criar um personalizado provedor de função que analisa seu armazenamento de dados ou você pode observar ADÃO, uma extensão do AD que fornece funções por programa e vem com ótimas ferramentas de gerenciamento.

using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

para obter o usuário do domínio atual.Claro que você precisa ter certeza de que o IIS está configurado para lidar com a autenticação do Windows.

Isso pode ser útil:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

Isenção de responsabilidade:Peguei isso em um artigo do technet, mas não consigo encontrar o link.

Você pode usar System.Threading.Thread.CurrentPrincipal.

Solicitação.ServerVariables["REMOTE_USER"]

Isso não foi verificado para sua configuração, mas lembro-me de usá-lo há algum tempo.

Tente Request.ServerVariables("LOGON_USER").

Se as opções de segurança do diretório estiverem definidas de forma que este diretório não permita usuários anônimos, quando o surfista acessar esta página, ele será solicitado com uma caixa de diálogo modal padrão solicitando nome de usuário e senha.Request.ServerVariables("LOGON_USER") retornará esse usuário.

No entanto, isso provavelmente não funcionará porque você está usando seus próprios objetos de segurança personalizados.Se você conseguir descobrir como contornar essa caixa de logon ou passar as credenciais do NT para o site antes que ele as solicite, estará tudo pronto.

Você já pensou em personificação?Você pode armazenar as credenciais de logon do NT do usuário em seu objeto de segurança personalizado e, em seguida, apenas representar o usuário por meio de código, quando apropriado.

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

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