Desenvolvimento - ASP. NET

ASP.NET: Configurando a segurança na sua aplicação

Quando estamos desenvolvendo aplicações ASP.NET, temos que reservar um certo tempo para nos preocuparmos com uma das partes mais importantes do projeto, a Segurança.

por Tiago Colombo



Configurando a segurança na sua aplicação Quando estamos desenvolvendo aplicações ASP.NET, temos que reservar um certo tempo para nos preocuparmos com uma das partes mais importantes do projeto, a Segurança. Precisamos configurar na nossa aplicação dois itens da Segurança: "authentication" - autenticação - e "authorization" - autorização.

Autenticação é o processo responsável por capturar as credenciais dos usuários e verificar suas permissões.

Depois do processo de autenticação, você deve definir as regras sobre o que cada usuário pode acessar, esse processo chama-se Autorização.

O ASP.NET permite alguns tipos de autenticação:

  • None
  • Windows
  • Forms
  • Passport

Uma boa alternativa para autenticar usuário é a utilização do "Impersonate" junto com a autenticação pelo Windows.

Autorização

Iremos definir e informar no Web.Config qual o tipo de autenticação deveremos utilizar na nossa aplicação, como veremos a seguir.

A autenticação "None" você simplesmente informa que todos terão acesso a sua aplicação sem nenhuma restrição:

<authentication mode="none" />

A autenticação "Windows" permite autenticar os usuários através dos usuários do Windows, exemplo, da sua rede corporativa.

A autenticação "Passport" permite autenticar os usuários através de um serviço da Microsoft chamado Microsoft Passport, ou seja, para o usuário acessar sua aplicação, precisará ter uma conta válida no Passport.

A autenticação "Forms" permite autenticar os usuários através de formulários que coletam informações dos usuários digitadas em controles e validadas através de lógica ou através de alguma fonte de dados. Podendo guardar as credenciais em Cookies.

Abaixo segue um exemplo de como configuração os tipos de autenticações no Web.Config:

<authentication mode="Forms" />
<authentication mode="Passport" />
<authentication mode="Windows" />

Segue um exemplo de uma autenticação por "Forms":

<authentication mode="Forms ">
   <forms name="AppTeste"
          loginUrl="frmLogin.aspx" 
          timeout="30" path="/" >
   </forms>
</authentication>

No exemplo acima estamos especificando o nome do Cookie como "AppTeste", a página principal de login como "frmLogin.aspx", ou seja, sempre que o funcionário tentar acessar uma página restrita, ele será redirecionado automaticamente para a página de Login. Especificamos também o TimeOut da aplicação para 30 minutos.

Na autenticação "Passport" os usuários devem ter um "passport" válido cadastrado na Microsoft, pois a validação é feita pelo Microsoft Passport.

Para utilizar esse tipo de autenticação, você deve fazer o download do SDK (Passport Software Development Kit) e instalar no servidor de sua aplicação. O SDK pode ser baixado do endereço
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrvpass.asp.

Autorização

Depois de definirmos o tipo de Autenticação que iremos utilizar, precisamos definir agora como iremos autorizar nossos usuários.

Caso você necessite restringir usuários por pastas, você pode criar um Web.Config na raiz da sua aplicação definindo o tipo de autenticação que sua aplicação irá utilizar e em cada pasta restrita crie um Web.Config definindo apenas a Autorização, pois a definição da autorização em pastas abaixo da raiz sobreporá as definidas no web.config da raiz.

Na autorização temos os seguintes elementos:

<authorization>
   <allow users="nome dos usuários separados por vírgulas"
          roles="nome dos grupos de usuários separados por vírgulas "
          verbs="nome dos métodos HTTP de envio de dados separados por vírgulas."/>

   <deny users="nome dos usuários separados por vírgulas"
          roles="nome dos grupos de usuários separados por vírgulas "
          verbs="nome dos métodos HTTP de envio de dados separados por vírgulas."/>

</authorization>

No elemento Allow, podemos definir as autorizações por usuários, grupos ou métodos de envio de HTTP. No emento allow users podemos usar interrogação (?) para permitir acesso a todos os usuários não autorizados, ou asterisco (*) para todos os usuários. Os mesmos sinais podem ser utilizados no elemento deny users, ou seja, (?) para bloquear acesso para todos usuários não autorizados ou (*) para todos os usuários.

No sub-elemento Roles, definimos os grupos que poderão acessar o sistema ou parte dele de acordo com o web.config, por exemplo:

<authorization>
   <allow roles="DOMINIO/ADMINS, DOMINIO/IT" />
   <deny roles="DOMINIO/RH"/>
</authorization>

No sub-elemento Verbs, definimos os métodos de envio HTTP. No ASP.NET podemos usar os seguintes: GET, HEAD, POST, e DEBUG.

Uma boa alternativa seria a utilização do "Impersonate". Por padrão o "Impersonate" no web.config é definido como False, ou seja, sua aplicação rodará sobre os privilégios do usuário ASPNET.

A segunda possibilidade é informar o "Impersonate" como True.

<identity impersonate="true" />

Nesse caso, como você não definiu uma identidade no "Impersonate", ele utilizará o usuário definido como anônimo no IIS, ou seja, o IUSR_NomeComputador.

Por fim, podemos informar uma identidade para ser utilizado no "Impersonate", por exemplo:

<identity impersonate="true" 
          userName="DOMINIO\tcolombo"
         	        password="12345senha"/>

Dessa forma sua aplicação rodará sobre os privilégios do usuário informado.

Conclusão

A etapa de Autorização e Autenticação na nossa aplicação seria nossa última no desenvolvimento da aplicação.

Aí vai uma dica: caso sua aplicação seja para uma INTRANET é aconselhado que use Autenticação "Windows", mas caso seja uma aplicação INTERNET, utilize Autenticação "Forms".

Espero que tenham gostado.

Abraços.

Tiago Colombo

Tiago Colombo - Analista de Sistema, certificado MCAD.NET (Microsoft Certified Application Developer) e atualmente trabalha com projetos na plataforma .NET. Especializando-se em Sistemas de Banco de Dados no IBTA (Instituto Brasileiro de Tecnologia Avançada), trabalha com .NET desde 2003 e têm atuado em diversos projetos de todos os portes.