none
Como abrir a tela de login do Windows?

    Question

  • seguinte pessoal... estou com uma dúvida aqui.

    como fazer para criar uma aplicativo com login controlado pelo windows?

     

    eu queria que o usuário do meu aplicativo só entrasse com uma senha válida cadastrada no windows.

     

    então em meu aplicativo, a tela de login seria a mesma do windows.

     

    se possível , podendo inclusive, chamar a tela de login de novo, ou seja, trocar de usuário no aplicativo, mesmo sem trocar o usuário do windows.

     

    deu para entender???

     

    Thursday, August 12, 2010 2:34 PM

All replies

  • O que vc pode fazer é utilizar o active directory

    Veja um exemplo:

    http://www.c-sharpcorner.com/uploadfile/ankithakur/login_using_active_directory04052006061801am/login_using_active_directory.aspx

     

    Ele usa uma comparaçao entre o metodo classico, onde vc tem que criar uma tabela em um banco para guardar os resultados ou usar o LDAP

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    Thursday, August 12, 2010 3:14 PM
  • eu já imaginava numa solução usando o AD, mas não posso ter tela nenhuma de login em meu aplicativo.

     

    o cliente desconfia que minha tela de login esteja armazenando dados como senha. então não posso ter nada no fonte que seja parecido com uma tela de senha.

     

    deixa eu dar um exemplo...

     

    estou criando um aplicativo q vai acessar os workitens do team system para poder "dar baixa". eu (como gerente) estou logado com o login X no meu windows, mas devo entrar em um workitem de um funcionario de login Y.

     

    então meu aplicativo deve mandar pro team system a credencial Y sem ter tela nenhuma de login. esta tela ou credencial deveria ser disponibilizada pelo próprio windows. nem q seja solicitar que o funcionário digite a senha "Y", mas que esta janela não esteja no meu código.

     

    entendeu o problemão?!?!?!

    Thursday, August 12, 2010 5:27 PM
  • Pra falar a verdade nao entendi bem o motivo do cliente achar que uma tela de login servirá para armazenar informaçoes pessoais, mas tudo bem... Nao sei como fazer isso. Nao existe uma tela padrao de login como existem para outros dialogos do windows.

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    Thursday, August 12, 2010 5:34 PM
  • Você pode usar a segurança integrada com o Windows...

    using System.Security.Principal;
    using System.Threading;
    using System.Security.Permissions;
    
       // cria um WindowsIdentinty com o usuário logado no windows...
       WindowsIdentity identity = WindowsIdentity.GetCurrent();
       // cria um principal para o usuário...
       WindowsPrincipal principal = new WindowsPrincipal(identity);
       // seta o principal da thread...
       Thread.CurrentPrincipal = principal;
       // especifica que o WindowsPrincipal deve ser usado...
       AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    
       // verifica se tem permissão para o grupo de usuário...
       string group = string.Format(@"{0}\NomeDoGrupo", System.Environment.MachineName);
       PrincipalPermission permission = new PrincipalPermission(null, group, true);
       permission.Demand();
    
      // você pode tambem verificar diretamente o principal...
       if (!principal.IsInRole(WindowsBuiltInRole.Administrator))
        throw new ApplicationException("O usuário deve ser administrador.");
    
    

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Thursday, August 12, 2010 5:44 PM
  • hummmm...

     

    estou começando a entender... mas ainda não visualizei...

     

    com o

    WindowsIdentity.GetCurrent();

    o usuário vai ser eu mesmo. não pode ser com outro?

     

    Thursday, August 12, 2010 7:38 PM
  • Você pode pegar outro, mas a idéia não é pegar o usuário logado no Windows?

    Para pegar outro usuário você deve fazer uma chamada a uma função não gerenciada para autenticar o usuário:

    Este link explica como faze-lo:

    http://blogs.msdn.com/b/shawnfa/archive/2005/03/21/400088.aspx

    At.,

     


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Thursday, August 12, 2010 7:47 PM
  • mesmo assim tenho q informar um usuário e senha... observe no 3º parametro:

     

    LogonUser(
      user,
      domain,
      password,
      LogonType.Interactive,
      LogonProvider.Default,
      out userHandle);
    

    estou vendo q a tela pedindo a senha será inevitável...

    Thursday, August 12, 2010 7:53 PM
  • Sim... Você tem que se autenticar de alguma maneira.

    Não tem como você simplesmente falar que está executando como o usuário X. Isto causaria grandes problemas de segurança.

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Thursday, August 12, 2010 8:02 PM
  • Meu amigo seguindo as linhas de reaciocionio citadas sugiro o seguinte já q não tem como fazer sem tela de login, pense da seguinte maneira cada usuário tem um user de máquina faça seu sistema criar perfis através disto e faça autenticação pelo usuário do windows iniciando seu aplicativo qndo o o windows for iniciado também pois dai se quiser torcar de user no sistema obrigatóriamente teria que ser feito logoff/logon pelo windows e provavelmente se trata de um ambiente em rede onde cada um tem sua máquina com usuário de dominio não?? então cadas usuário do dominio tem determinadas permissões tente interagir com isto seguindo esta linha e veja se tu conseguis resolver teu problema

    Att Edney

    Thursday, August 12, 2010 8:18 PM
  • eu consigo pegar a lsita de todas as credenciais do windows com todos os ususários com todas as informações, exceto as senhas.

     

    na hora q eu for fazer uma opração com um dos usuários desta lista q for diferente do login atual, abro uma janela pedindo a senha...

     

    foi a única solução funcional q consegui implementar até o momento.

    Thursday, August 12, 2010 8:43 PM
  • Você não vai ter como fugir disto não.

    Acredito que seja a melhor opção, já que você tem que trocar o usuário sem fazer o logoff do Windows.

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Thursday, August 12, 2010 8:44 PM
  • @Marcelo

    Por uma questao de seguranda voce vai ter de fazer como o Rogerio disse e tambem o Edney. 

    A tua pergunta nao faz muita logica no mundo da programacao aberta, geralmente esta tecnica e desenvolvida no mundo "hacker",

    "Pra falar a verdade nao entendi bem o motivo do cliente achar que uma tela de login servirá para armazenar informaçoes pessoais"

    O rogerio nao deveria postar este codigo, mas sim indidcar o website da Microsoft. http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx aqui tem uma explicacao detalhada.

     

    Aqui aborda seguranca: http://msdn.microsoft.com/en-us/library/system.security.principal.aspx

    Tambem aqui: http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx

    Voce quer pegar senha do outros usuarios e informar? Por que?

    Cada usuario sabe a sua password......

     


    Just Be Humble Malange!
    Thursday, August 12, 2010 9:42 PM
  • na verdade o team system é integrado com o windows e utiliza as senhas do windows.

     

    o gerente q trabalha com o team system quer um aplicativo auxiliar q tb seja integrado ao team system.

     

    tudo para facilitar o uso dos workitens.

     

    se eu não me engano o team system não pede senha toda vez q o gerente abre os workitens dos funcionarios...

     

    mas, de qualquer forma, vou abrir os links informados e estudar um pouco.

    Thursday, August 12, 2010 9:55 PM
  • Marcelo,

    Na verdade, ele faz o controle de acordo com o grupo do usuário.

    Ele não pede a senha do gerente ao entrar, ele usa a própria senha que foi logada no Windows.

    O que você tem que fazer, é controlar o acesso as funcionalidades do seu sistema de acordo com o grupo do usuário. Ou seja, se o usuário for um administrador, ele tem acesso a tudo, por exemplo. Se ele não for administrador, ele tem acesso somente as suas tarefas.

    O código que te passei na minha primeira resposta é para fazer exatamente isto.

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    Friday, August 13, 2010 12:15 PM