Autenticar usuários com a autenticação de formulários (C#)
pela Microsoft
Saiba como usar o atributo [Autorizar] para proteger por senha páginas específicas em seu aplicativo MVC. Você aprenderá a usar a Ferramenta de Administração de Site para criar e gerenciar usuários e funções. Você também aprenderá a configurar onde as informações de conta de usuário e função são armazenadas.
O objetivo deste tutorial é explicar como você pode usar a autenticação do Forms para proteger por senha as exibições em seus aplicativos ASP.NET MVC. Você aprenderá a usar a Ferramenta de Administração de Site para criar usuários e funções. Você também aprenderá a impedir que usuários não autorizados invoquem ações do controlador. Por fim, você aprenderá a configurar onde nomes de usuário e senhas são armazenados.
Usando a Ferramenta de Administração de Site
Antes de fazermos qualquer outra coisa, devemos começar criando alguns usuários e funções. A maneira mais fácil de criar novos usuários e funções é aproveitar a Ferramenta de Administração de Site do Visual Studio 2008. Você pode iniciar essa ferramenta selecionando a opção de menu Project, ASP.NET Configuration. Como alternativa, você pode iniciar a Ferramenta de Administração de Site clicando no ícone (um pouco assustador) do martelo que atinge o mundo que aparece na parte superior da janela Gerenciador de Soluções (consulte Figura 1).
Figura 1 – Iniciando a Ferramenta de Administração de Site
Na Ferramenta de Administração de Site, você cria novos usuários e funções selecionando a guia Segurança. Clique no link Criar usuário para criar um novo usuário chamado Stephen (consulte a Figura 2). Forneça ao usuário stephen qualquer senha desejada (por exemplo, segredo).
Figura 2 – Criando um novo usuário
Você cria novas funções primeiro habilitando funções e definindo uma ou mais funções. Habilite as funções clicando no link Habilitar funções . Em seguida, crie uma função chamada Administradores clicando no link Criar ou Gerenciar funções (consulte Figura 3).
Figura 3 – Criando uma nova função
Por fim, crie um novo usuário chamado Sally e associe Sally à função Administradores clicando no link Criar Usuário e selecionando Administradores ao criar Sally (consulte a Figura 4).
Figura 4 – Adicionar um usuário a uma função
Quando tudo for dito e concluído, você deve ter dois novos usuários chamados Stephen e Sally. Você também deve ter uma nova função chamada Administradores. Sally é membro do papel de Administradores e Stephen não.
Exigindo autorização
Você pode exigir que um usuário seja autenticado antes que o usuário invoque uma ação de controlador adicionando o atributo [Authorize] à ação. Você pode aplicar o atributo [Autorizar] a uma ação de controlador individual ou aplicar esse atributo a uma classe de controlador inteira.
Por exemplo, o controlador na Listagem 1 expõe uma ação chamada CompanySecrets(). Como essa ação é decorada com o atributo [Autorizar], essa ação não pode ser invocada, a menos que um usuário seja autenticado.
Listagem 1 – Controllers\HomeController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
}
}
Se você invocar a ação CompanySecrets() inserindo a URL /Home/CompanySecrets na barra de endereços do navegador e você não for um usuário autenticado, você será redirecionado para a exibição de Logon automaticamente (consulte a Figura 5).
Figura 5 – A exibição de logon
Você pode usar o modo de exibição logon para inserir seu nome de usuário e senha. Se você não for um usuário registrado, clique no link registrar para navegar até a exibição Registrar (consulte a Figura 6). Você pode usar o modo de exibição Registrar para criar uma nova conta de usuário.
Figura 6 – a exibição Registrar
Depois de fazer logon com êxito, você poderá ver a exibição CompanySecrets (consulte Figura 7). Por padrão, você continuará conectado até fechar a janela do navegador.
Figura 7 – a exibição CompanySecrets
Autorizando por nome de usuário ou função de usuário
Você pode usar o atributo [Autorizar] para restringir o acesso a uma ação do controlador a um determinado conjunto de usuários ou a um determinado conjunto de funções de usuário. Por exemplo, o controlador Home modificado na Listagem 2 contém duas novas ações chamadas StephenSecrets() e AdministratorSecrets().
Listagem 2 – Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
[Authorize(Users="Stephen")]
public ActionResult StephenSecrets()
{
return View();
}
[Authorize(Roles = "Administrators")]
public ActionResult AdministratorSecrets()
{
return View();
}
}
}
Somente um usuário com o nome de usuário Stephen pode invocar a ação StephenSecrets(). Todos os outros usuários são redirecionados para o modo de exibição logon. A propriedade Usuários aceita uma lista separada por vírgulas de nomes de conta de usuário.
Somente os usuários na função Administradores podem invocar a ação AdministratorSecrets(). Por exemplo, como Sally é membro do grupo Administradores, ela pode invocar a ação AdministratorSecrets(). Todos os outros usuários são redirecionados para o modo de exibição logon. A propriedade Roles aceita uma lista separada por vírgulas de nomes de função.
Configurando a autenticação
Neste ponto, você pode estar se perguntando onde a conta de usuário e as informações de função estão sendo armazenadas. Por padrão, as informações são armazenadas em um banco de dados SQL Express (RANU) chamado ASPNETDB.mdf localizado na pasta App_Data do aplicativo MVC. Esse banco de dados é gerado pela estrutura ASP.NET automaticamente quando você começa a usar a associação.
Para ver o banco de dados ASPNETDB.mdf na janela Gerenciador de Soluções, primeiro você precisa selecionar a opção de menu Projeto, Mostrar Todos os Arquivos.
Usar o banco de dados padrão do SQL Express é bom ao desenvolver um aplicativo. Provavelmente, no entanto, você não deseja usar o banco de dados ASPNETDB.mdf padrão para um aplicativo de produção. Nesse caso, você pode alterar onde as informações da conta de usuário são armazenadas concluindo as duas etapas a seguir:
- Adicionar os objetos de banco de dados dos Serviços de Aplicativo ao banco de dados de produção – altere a cadeia de conexão do aplicativo para apontar para o banco de dados de produção
A primeira etapa é adicionar todos os objetos de banco de dados necessários (tabelas e procedimentos armazenados) ao banco de dados de produção. A maneira mais fácil de adicionar esses objetos a um novo banco de dados é aproveitar o Assistente de Instalação do ASP.NET SQL Server (consulte a Figura 8). Você pode iniciar essa ferramenta abrindo o Prompt de Comando do Visual Studio 2008 do grupo de programas do Microsoft Visual Studio 2008 e executando o seguinte comando no prompt de comando:
aspnet_regsql
Figura 8 – Assistente de Instalação do ASP.NET SQL Server
O Assistente de Instalação do ASP.NET SQL Server permite que você selecione um banco de dados SQL Server em sua rede e instale todos os objetos de banco de dados exigidos pelos serviços de aplicativos ASP.NET. O servidor de banco de dados não precisa estar localizado no computador local.
Observação
Se você não quiser usar o Assistente de Instalação do ASP.NET SQL Server, poderá encontrar scripts SQL para adicionar os objetos de banco de dados dos serviços de aplicativo na seguinte pasta:
C:\Windows\Microsoft.NET\Framework\v2.0.50727
Depois de criar os objetos de banco de dados necessários, você precisa modificar a conexão de banco de dados usada pelo aplicativo MVC. Modifique a cadeia de conexão ApplicationServices no arquivo de configuração da Web (web.config) para que ele aponte para o banco de dados de produção. Por exemplo, a conexão modificada na Listagem 3 aponta para um banco de dados chamado MyProductionDB (a cadeia de conexão ApplicationServices original foi comentada).
Listagem 3 – Web.config
<connectionStrings>
<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>
Configurando permissões de banco de dados
Se você usar a Segurança Integrada para se conectar ao banco de dados, precisará adicionar a conta de usuário correta do Windows como logon ao banco de dados. A conta correta depende se você está usando o servidor de desenvolvimento ASP.NET ou os Serviços de Informações da Internet como seu servidor Web. A conta de usuário correta também depende do sistema operacional.
Se você estiver usando o servidor de desenvolvimento ASP.NET (o servidor Web padrão usado pelo Visual Studio), o aplicativo será executado no contexto da sua conta de usuário do Windows. Nesse caso, você precisa adicionar sua conta de usuário do Windows como um logon do servidor de banco de dados.
Como alternativa, se você estiver usando os Serviços de Informações da Internet, precisará adicionar a conta ASPNET ou a conta NT AUTHORITY/NETWORK SERVICE como um logon do servidor de banco de dados. Se você estiver usando o Windows XP, adicione a conta ASPNET como logon ao banco de dados. Se você estiver usando um sistema operacional mais recente, como o Windows Vista ou o Windows Server 2008, adicione a conta NT AUTHORITY/NETWORK SERVICE como o logon do banco de dados.
Você pode adicionar uma nova conta de usuário ao banco de dados usando o Microsoft SQL Server Management Studio (consulte a Figura 9).
Figura 9 – Criando um novo logon do Microsoft SQL Server
Depois de criar o logon necessário, você precisa mapear o logon para um usuário de banco de dados com as funções de banco de dados corretas. Clique duas vezes no logon e selecione a guia Mapeamento de Usuário. Selecione uma ou mais funções de banco de dados de serviços de aplicativo. Por exemplo, para autenticar usuários, você precisa habilitar a função de banco de dados aspnet_Membership_BasicAccess. Para criar novos usuários, você precisa habilitar a função de banco de dados aspnet_Membership_FullAccess (consulte a Figura 10).
Figura 10 – Adicionando funções de banco de dados dos Serviços de Aplicativos
Resumo
Neste tutorial, você aprendeu a usar a autenticação de Formulários ao criar um aplicativo MVC ASP.NET. Primeiro, você aprendeu a criar novos usuários e funções aproveitando a Ferramenta de Administração de Site. Em seguida, você aprendeu a usar o atributo [Authorize] para impedir que usuários não autorizados invoquem ações do controlador. Por fim, você aprendeu a configurar seu aplicativo MVC para armazenar informações de usuário e função em um banco de dados de produção.