Autenticar usuários com a autenticação de formulários (VB)

pela Microsoft

Saiba como usar o atributo [Autorizar] para proteger páginas específicas por senha 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 de Formulários para proteger por senha os modos de exibição em seus aplicativos MVC ASP.NET. 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 os 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 Projeto ASP.NET Configuração. Como alternativa, você pode iniciar a Ferramenta de Administração de Site clicando no ícone (um tanto assustador) do martelo que atinge o mundo que aparece na parte superior da janela Gerenciador de Soluções (consulte a Figura 1).

Figura 1 – Iniciando a Ferramenta de Administração de Site

clip_image002[4]

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

clip_image004[4]

Você cria novas funções habilitando primeiro as 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 a Figura 3).

Figura 3 – Criando uma nova função

clip_image006[4]

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

clip_image008[4]

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 é.

Exigir autorização

Você pode exigir que um usuário seja autenticado antes que o usuário invoque uma ação do controlador adicionando o atributo [Authorize] à ação. Você pode aplicar o atributo [Authorize] a uma ação de controlador individual ou pode 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 [Authorize], essa ação não pode ser invocada, a menos que um usuário seja autenticado.

Listagem 1 – Controllers\HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function

End Class

Se você invocar a ação CompanySecrets() inserindo a URL /Home/CompanySecrets na barra de endereços do navegador e não for um usuário autenticado, será redirecionado automaticamente para o modo de exibição logon (consulte a Figura 5).

Figura 5 – A exibição de logon

clip_image010[4]

Você pode usar a exibição logon para inserir seu nome de usuário e senha. Se você não for um usuário registrado, poderá clicar no link registrar para navegar até o modo de 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 – O modo de exibição Registrar

clip_image012

Depois de fazer logon com êxito, você poderá ver a exibição CompanySecrets (consulte a Figura 7). Por padrão, você continuará conectado até fechar a janela do navegador.

Figura 7 – A exibição CompanySecrets

clip_image014

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.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

    <Authorize()> _
    Function CompanySecrets()
        Return View()
    End Function


    <Authorize(Users:="Stephen")> _
    Function StephenSecrets()
        Return View()
    End Function

    <Authorize(Roles:="Administrators")> _
    Function AdministratorSecrets()
        Return View()
    End Function

End Class

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 Users 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 desejará usar o banco de dados ASPNETDB.mdf padrão para um aplicativo de produção. Nesse caso, você pode alterar o local em que as informações da conta de usuário são armazenadas concluindo as duas etapas a seguir:

  1. Adicionar os objetos de banco de dados dos Serviços de Aplicativos 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 no grupo de programas do Microsoft Visual Studio 2008 e executando o seguinte comando no prompt de comando:

aspnet_regsql

Figura 8 – O Assistente de Instalação do ASP.NET SQL Server

clip_image016

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 aplicativo do 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 do ASP.NET ou os Serviços de Informações da Internet como 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 de servidor de banco de dados. Se você estiver usando o Windows XP, adicione a conta ASPNET como um 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

clip_image018

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

clip_image020

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.