Utilizando Windows Authentication em projetos ASP.NET MVC
O desenvolvimento de soluções baseadas na tecnologia ASP.NET requer, quase que invariavelmente, a definição de alguma forma de controle de acesso às funcionalidades que farão parte de tais sistemas. A implementação de rotinas deste tipo costuma tomar por base dois conceitos básicos da área de Segurança da Informação: autenticação e autorização.
Em termos práticos, a autenticação é um processo no qual um usuário apresenta sua identificação junto a um mecanismo de validação, com este último liberando ou não o acesso aos diferentes recursos de uma aplicação. Quanto à noção de autorização, a ideia principal por trás desta técnica está em determinar se um usuário já autenticado poderá ou não acessar uma determinada função do sistema; este procedimento pode envolver tanto a verificação de logins/contas individualmente, quanto a checagem dos direitos de acesso concedidos a grupos de usuários (roles) aos quais uma pessoa pode estar vinculada.
Considerando o desenvolvimento de soluções em ASP.NET, a forma como os conceitos de autenticação e autorização são implementados costuma variar bastante de uma aplicação a outra. Uma das possibilidades seria empregar o mecanismo conhecido como ASP.NET Membership, o qual se baseia na utilização de um banco de dados SQL para o armazenamento de informações relativas a usuários e direitos de acesso. No que se refere à construção de portais voltados à Intranet de uma organização, o mais comum é que as mesmas dependam de regras e usuários definidos no Active Directory (AD). Este último é um serviço disponibilizado por servidores Windows para tarefas relacionadas à autenticação e autorização de usuários, com o modo que faz uso do mesmo em projetos ASP.NET sendo chamado de Windows Authentication.
O objetivo deste artigo é demonstrar o uso do modo Windows Authentication em uma aplicação ASP.NET MVC. Para isto será criado um projeto baseado no framework MVC no Microsoft Visual Studio 2013 Professional, conforme descrito na próxima seção.
Criando uma aplicação MVC baseada em Windows Authentication
O primeiro passo para a implementação da aplicação proposta será a criação de um projeto do tipo “ASP.NET Web Application” chamado “TesteWindowsAuthenticationMVC” (Imagem 1). Selecionar na sequência o template “MVC” (Imagem 2), acionar o botão “Change Authentication” e, por fim, marcar a opção “Windows Authentication” como mecanismo de autenticação (Imagem 3).
Imagem 1. Criando uma ASP.NET Web Application no Visual Studio 2013
Imagem 2. Selecionando o template para a crição de uma Web Application
Imagem 3. Selecionando modo Windows Authentication
Opcionalmente, o projeto TesteWindowsAuthenticationMVC também poderá ser atualizado para utilizar o release mais recente do ASP.NET MVC (no caso, a versão 5.1.1). Uma das formas de se fazer isto é através do utilitário NuGet, como indicado na Imagem 4.
Imagem 4. Atualizando a versão do framework ASP.NET MVC
Através do template para geração de projetos MVC, o Visual Studio 2013 preencherá automaticamente o arquivo Web.config de forma a gerar as configurações necessárias para o uso do modo Windows Authentication (dentro do elemento system.web). Isto pode ser observado no trecho de código apresentado na Listagem 1:
- No atributo “mode” do elemento authentication foi definido o valor “Windows”;
- Já no elemento authorization foi incluído o item deny, com o atributo “users” sendo configurado com o valor “?”. Este ajuste determina que o acesso será negado a usuários anônimos.
[code language=”xml” highlight=”9,10,11,12"]
<?xml version=”1.0" encoding=”utf-8"?>
<configuration>
…
<system.web>
…
<authentication mode=”Windows” />
<authorization>
<deny users=”?” />
</authorization>
</system.web>
…
</configuration>
[/code]
Listagem 1: Arquivo Web.config configurado para o uso de Windows Authentication
As configurações descritas na Listagem 1 também podem ser modificadas selecionando as definições do projeto TesteWindowsAuthenticationMVC, com isto acontecendo a partir da janela Properties (Imagem 5).
Imagem 5. Configurando o uso de Windows Authentication via janela Properties
Executando a aplicação de testes será possível notar que o nome do usuário e o domínio ao qual este pertence constam no cabeçalho da página (Imagem 6).
Imagem 6. Aplicação já habilitada para o uso de Windows Authentication
A identidade do usuário (formada pela concatenação de um domínio e um login) pode ser obtida por meio do objeto HttpContext (como indicado na Listagem 2). Acessando as propriedades User e Identity a partir desta instância será retornado um objeto do tipo IIdentity (namespace System.Security.Principal), o qual permite o acesso a informações de login: através da propriedade Name é possível se obter a identidade de tal usuário.
[code language=”csharp”]string username = HttpContext.User.Identity.Name;[/code]
Listagem 2: Acessando informações de um usuário via objeto HttpContext
Checagens para determinar se o usuário atual pertence a um determinado grupo também podem ser realizadas. Uma das alternativas seria invocar o método IsInRole, a partir da propriedade User do objeto HttpContext (Listagem 3): esta operação recebe como parâmetro uma string contendo a identificação de um grupo de usuários (este último valor é formado pela concatenação do domínio e do nome do grupo), retornando um valor booleano que indica se o acesso está liberado.
[code language=”csharp”]
if (HttpContext.User.IsInRole(@”DOMINIO\grupo”))
{
// Executa ações específicas para um grupo
}
[/code]
Listagem 3: Verificando se um usuário pertence a um determinado grupo
É possível ainda restringir o acesso a Actions de um Controller, marcando os métodos correspondentes com o atributo AuthorizeAttribute (namespace System.Web.Mvc). Isto é demonstrado na Listagem 4:
- A Action Action01 foi marcada com o atributo AuthorizeAttribute (namespace System.Web.Mvc), preenchendo-se o parâmetro User com a lista de usuários que poderão acessar esta construção;
- Já a Action Action02 conta com um comportamento similar, diferindo apenas pelo uso do parâmetro Roles para indicar dois grupos que serão considerados no acesso à Action em questão.
[code language=”csharp” highlight=”11,17"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TesteWindowsAuthenticationMVC.Controllers
{
public class ExemploController : Controller
{
[Authorize(Users = @”DOMINIO\usuario01, DOMINIO\usuario02 “)]
public ActionResult Action01()
{
// Instruções da Action01…
}
[Authorize(Roles = @”DOMINIO\grupo01, DOMINIO\grupo02")]
public ActionResult Contact()
{
// Instruções da Action02…
}
}
}
[/code]
Listagem 4: Definindo o acesso a Actions de um Controller
Caso o usuário que tente acessar alguma destas Actions não possua as permissões esperadas, uma tela como a que consta na Imagem 7 aparecerá. O acesso então somente será liberado com o fornecimento de credenciais válidas.
Imagem 7. Usuário tentando acessar uma Action para a qual não possui direitos
A ideia deste post foi demonstrar como o ASP.NET MVC pode ser utilizado na construção de aplicações voltadas a uma Intranet, com a utilização de recursos do Active Directory como mecanismo de segurança. Este framework de desenvolvimento Web suporta ainda outros meios para a condução de procedimentos de autenticação/autorização, cabendo aos desenvolvedores avaliar qual alternativa melhor se adequa ao contexto particular de cada projeto.
Espero que o conteúdo aqui apresentado possa ser útil. Até uma próxima oportunidade!
Links
MVC: The Official Microsoft ASP.NET Site
http://www.asp.net/mvc
Filters no ASP.NET MVC
http://www.devmedia.com.br/filters-no-asp-net-mvc-3-revista-net-magazine-94/23663
Segurança em aplicações .NET: utilizando o provider ASP.NET Membership
http://www.devmedia.com.br/seguranca-em-aplicacoes-net-utilizando-o-provider-asp-net-membership/27822