Autenticar usuário em WinForms (nada a ver com ASP.Net)

1

Originalmente postado no StackOverflow , publicado aqui como sugerido nos comentários do SO.

Introdução

Eu preciso proteger com senha algumas ações em meu aplicativo, como carregar / salvar arquivos, clicar em caixas de seleção, etc. Este é um aplicativo padrão C # .Net 4.0, WinForms que será executado no Windows 7 em uma rede corporativa.

Eu estava prestes a criar meu próprio sistema básico (ler ofuscação com backdoors abertos) com um arquivo de texto de usuários / senhas / permissões (com hash e salgados) até depois de alguma pesquisa eu encontrei o que parece ser um abordagem tentadoramente simples , mas estou com dificuldades em encontrar um bom tutorial sobre os Papéis que não é sobre o ASP.NET.

Pergunta

Alguém sabe de um ou mais tutoriais que mostram como:

  1. Crie um usuário / grupo do Windows e conceda a esse usuário / grupo Role ou permissão.
    • Observe que estou testando isso no laptop em rede da minha empresa, mas vou implantá-lo na rede corporativa do cliente (não tenho certeza se isso é um problema ou o quanto isso vai ficar complicado).
  2. Crie um exemplo de app winforms / console com apenas um único método que imprima "Hello World" se eu estiver autenticado ou lançar uma exceção se eu não o for?
  3. Eu nunca fiz Network Admin ou qualquer coisa relacionada e eu continuo lendo sobre o Active Directory e usuários locais Vs usuários em rede ... Eu estava esperando por uma abordagem onde eu poderia construir para um Interface e apenas perguntar ao Windows se o usuário atual tem permissão ABC e não se importa muito com a forma como o Windows descobriu isso. Então eu posso fazer uma implementação concreta para cada local / rede / ActiveDirectory / etc. caso de uso, conforme necessário (ou se necessário ... como eu nem sei disso agora).

Antecedentes

- read if interested, but not required to answer question

Só para ter certeza de que estou indo na direção certa aqui, basicamente eu preciso / quero testar isso no meu PC de desenvolvimento para ter certeza de que vai ter uma boa experiência do usuário final para o meu cliente. O problema é que atualmente eles executam um script de login automático para cada computador que executa meu aplicativo e há vários operadores diferentes que usam meu aplicativo ao longo do dia. O cliente quer proteção por senha em determinados recursos do meu aplicativo e apenas fornece isso para determinados operadores. Eu não tenho nenhum problema em encaixar isso, como eu esperava o pedido por um tempo, eu apenas nunca programou autenticação antes.

Acho que vale a pena convencer meu cliente a fornecer a cada operadora sua própria conta de rede e atribuir as permissões que quiserem a esse operador ou grupo, caso precisem demitir alguém, alterar permissões etc. Também significa que acabei de abrir várias opções para eles e eles podem agrupar essas permissões como quiserem com base em políticas corporativas internas, com as quais eu realmente não deveria ter que se preocupar (mas será, se eu tiver que criar minhas próprias, como o departamento de TI sabe) quase nada da minha aplicação).

Pelo que eu posso dizer, isso facilita muito minha vida, pois não tenho que lidar com senhas e criptografia de hash, etc., e apenas manipular qual função é necessária para clicar neste ou naquele botão.

    
por HodlDwon 05.04.2014 / 00:45

1 resposta

1

Não sei qual é o método atual de "melhor prática" de fazer autorização em um aplicativo baseado em .NET. Aqui está algo que eu fiz muitos anos atrás em um aplicativo baseado na web que escrevi para descarregar toda a funcionalidade de autorização para o próprio sistema operacional. (Isso provavelmente sairá como um hack desonesto escrito por alguém que é primeiro um administrador de sistemas e um segundo desenvolvedor).

  • Eu enumerei todas as permissões no aplicativo e criei os arquivos em uma hierarquia de diretórios para torná-los seletivamente disponíveis para os usuários designados à (s) função (ões) apropriada (s). (Os arquivos não contêm nada - como você verá abaixo, apenas verifiquei se o usuário poderia ler o arquivo.)

  • Criaram grupos do Active Directory que identificaram as funções dos usuários do aplicativo.

  • Permissão atribuída para ler os arquivos que criei na etapa anterior aos grupos do Active Directory.

Quando o usuário autenticado no aplicativo (baseado na web) foi feita uma tentativa de acessar cada um dos arquivos de "permissão". Com base no que foi bem-sucedido / falhou, o aplicativo pôde verificar o "papel" atribuído pelo usuário.

Para o departamento de TI do Cliente, alterar a permissão para o aplicativo era uma questão de alterar as ACLs nos arquivos de "permissão" (se eles precisassem fazer mudanças radicais) ou, mais frequentemente, apenas alterar as associações de grupos de usuários.

Gostei desse método porque ele lida com todos os "casos de borda" muito bem - associações de grupos aninhadas, entidades de segurança de florestas estrangeiras, etc. Também é legal porque, se esses arquivos de permissão foram realocados para uma máquina Windows Server 2012 , meu aplicativo de repente ganha a nova funcionalidade do Dynamic Access Control "de graça".

    
por 05.04.2014 / 02:04