ASP .NET - Criando uma aplicação para autenticação de usuários


Neste artigo eu vou mostrar como podemos criar uma aplicação para autenticar usuários usando os controles de autenticação e autorização ASP .NET.

Apenas para recordar, você já deve saber que a ASP .NET pode controlar o processo de autenticação de forma automática bastando para isso configurar o arquivo web.config para realizar a autenticação via formulário. A partir deste momento a ASP .NET passa a verificar em todos os acessos se a página esta ou não logada através do cookie de autenticação existente. Se o cookie não existir a requisição será direcionada para o formulário definido no arquivo web.config.

Então para o processo ser ativado basta definir a seguinte declaração no arquivo web.config, na seção <sistem.web>:

<authentication mode="Forms">

Existem 4 parâmetros que o authentication mode aceita :

Além disso podemos definir como será a autorização usando a tag <authorization> :

 <!-- definindo a autorização-->
   <authorization>
     <deny users="?"/>  
   </authorization>
 </system.web>
deny users="?" -> indica que estamos negando o acesso a todos os usuários anônimos ou não autenticados;

Os atributos da tag são: deny | allow -> Torna possível negar(deny) ou permitir(allow) o acesso a um recurso aos usuários.

Além disso podemos usar a tag <location> para indicar um recurso sobre o qual vamos permitir ou negar o acesso. Veja este exemplo:

 <!-- Definindo a restrição de acesso a pasta Admin-->
  <location path="Admin">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
  </configuration>

Os providers Roles e MemberShip fornecem os recursos para gerenciar a autenticação e autorização. Onde a autenticação é o processo para verificar a identidade do usuário e a autorização refere-se ao gerenciamento das permissões dos usuários.

Usando os novos providers Roles e MemberShip e os novos controles para gerenciar usuários, a segurança e o login ficou praticamente automatizada.(eu disse praticamente e não completamente...).

O conjunto dos novos recursos chamados provedores faz parte da nova arquitetura chamada Provider Model onde os providers são componentes que fornecem serviços configuráveis idênticos aos plug-ins.

Através do provedor MemberShip podemos criar novos usuários e senhas em um banco de dados e validar a identidade do usuário usando a informação armazenada.  Para armazenar a informação o provedor usa um banco de dados SQL Server que é gerado automaticamente, e, de forma transparente na pasta App_Data, se usarmos o modo padrão do provedor. Abaixo os provedores e as classes usadas:

Provedor Classe Base Descrição
MemberShip MemberShiperProvider Gerenciar os usuários na aplicação ASP.NET - Responsável pela autenticação dos usuários
Roles RoleProvider Gerenciar os papeis dos usuários na aplicação ASP.NET - Responsável pela autorização com atribuição de grupos e permissões.

Criando a aplicação para autenticar usuários

Vamos criar então uma aplicação ASP .NET Web Forms para realizar a autenticação de usuários usando os recursos de MemberShip, Roles e os controles de login e autenticação e autorização da ASP .NET.

Vemos abaixo o diagrama que mostra o fluxo de interação do usuário com a interface da aplicação de autenticação. Podemos identificar 8 páginas:

  1. Login.aspx - A primeira página a ser exibida e solicita a informação de nome e senha do usuário. Se o login estiver correto o usuário acessa a página Default.aspx;
  2. Default.aspx - Esta página apenas exibe uma mensagem e possui um link para a página ListaUsuarios.aspx;
  3. Registrar.aspx - Página usada para registrar um novo usuário;
  4. Recupera.aspx - Esta página permite recuperar a senha de um usuário;
  5. Recuperada.aspx - Exibe a mensagem para uma senha recuperada com sucesso;
  6. AlteraSenha.aspx - Permite alterar a senha do usuário;
  7. Admin.aspx - Página do perfil Admin;
  8. ListaUsuarios.aspx - Exibe uma lista de usuários on-line;

O diagrama nos dá uma visão completa das páginas e do fluxo da informação.

Para criar a nossa aplicação vamos usar os seguintes recursos:

Vamos criar uma aplicação ASP .NET definindo uma solução com 1 projeto do tipo ASP .NET Empty Web Application contendo 3 pastas com a seguinte estrutura:

Web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5"  />
      <authorization>
        <allow roles="Admin" />
        <deny users="*" />
      </authorization>
    </system.web>
</configuration>
O elemento Allow permite o acesso aos usuários com perfil (role) Admin;
O elemento <deny> nega o acesso a todos usuários (*)

Web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5"  />
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
</configuration>
O elemento <deny> nega o acesso aos usuários anônimos ou não
autenticados.(?)

Web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5"  />
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
</configuration>
O elemento <deny> nega o acesso aos usuários anônimos ou não
autenticados.(?)

Web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5"  />
      <authorization>
        <deny users="?" />
      </authorization>
      <roleManager enabled="true" />
      <authentication mode="Forms" />
    </system.web>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
  </appSettings>
    <system.net>
       <mailSettings>
        <smtp>
           <network host="seuservidorsmtp.mail.server" />
        </smtp>
     </mailSettings>
  </system.net>
</configuration>
O elemento <deny> nega o acesso aos usuários anônimos ou não
autenticados.(?)

o elemento <roleManger> é definido para habilitar roles.


A seção <mailSettings> fornece as informações necessárias
para acessar um servidor de email e para enviar e-mail quando o
usuário se registra ou solicita uma recuperação de senha. O atributo
host especifica o nome do host de correio, e o atributo from especifica o endereço listado no campo from para qualquer mensagens de e-mail enviadas.

Dependendo de como o servidor de correio está configurado, você também pode precisar fornecer um nome de usuário e senha através do usuário e atributos de senha.

Note que temos 4 arquivos Web.config onde definimos a autorização do usuário.

Abra o Visual Studio 2012 Express for web e clique em New Project e selecione o template ASP .NET Empty Web Application informando o nome Aplicacao_Autenticacao;

Altere o nome do projeto para LoginASPNET.

Clique com o botão direito do mouse sobre o nome do projeto e selecione Add -> New Folder e crie 3 pastas:

A seguir vamos definir cada uma das páginas em sua respectiva pasta.

1- Master Page

Na raiz do projeto vamos criar a master page.

No menu PROJECT clique em Add New Item e selecione o template Master Page e informe o nome Mestre.Master:

Nossa master page será usada pelas outras páginas do site de forma a termos uma identidade visual. Ela irá conter 4 elementos básicos:

Obs: Para definir um usuário com perfil Admin utilize a opção ASP .NET Configuration do menu PROJECT.

Para construir estas funcionalidades iremos usar os seguintes controles da ToolBox na master page:

Abaixo vemos o código completo da master page:

   <%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Mestre.master.vb" Inherits="LoginASPNET.Mestre" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image ID="Image1" runat="server" ImageUrl="~/Imagens/pirata.jpg"/><br />
        <asp:LoginStatus ID="LoginStatus1" runat="server" style="font-weight: 700" />
        <asp:LoginView ID="LoginView1" runat="server"> 
            <RoleGroups>
               <asp:RoleGroup Roles="Admin">
                <ContentTemplate>
                   <a href="Admin/Admin.aspx">Pagina de Administração</a>
                </ContentTemplate>
              </asp:RoleGroup>
           </RoleGroups>
           </asp:LoginView>
           <br />
           <asp:LoginName ID="LoginName1" runat="server" FormatString="Ola, {0}" style="font-weight: 700; font-size: large; color: #003399" /><br />
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html> 

O leiaute da página é mostrado a seguir:

2- Default.aspx

A página Default.aspx irá usar a master page que criamos anteriormente.

No menu PROJECT clique em Add New Item e selecione o template Web Form using Master Page e informe o nome Default.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

A seguir abra a página Default.aspx e defina o seguinte código:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Default.aspx.vb" Inherits="LoginASPNET._Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <br /><br />
      Parabéns ! Você foi autenticado e esta na página de conteúdo.
    <br /><br />
    <a href="ListaUsuarios.aspx">Lista de usuários</a>
</asp:Content>

3 - Admin.aspx

A página Admin.aspx será exibida somente por usuários com perfil Admin. Ela exibe apenas uma mensagem ao usuário e um botão que permite retornar a página Default.apx;

Esta página será criada na pasta Admin. Lembre-se que nesta pasta temos um web.config que restringe o acesso aos usuários logados e que pertencem ao perfil Admin.

Clique com o botão direito sobre a pasta Admin e selecione Add -> New Item;

A seguir escolha o template Web Form using Master Page e informe o nome Admin.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página os controles: Button e defina o seguinte código nesta página no modo Source:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Admin.aspx.vb" Inherits="LoginASPNET.Admin" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    ContentPlaceHolderID=”ContentPlaceHolder1” >
    <br /><br />
    Parabéns ! Você alcançou a página de Administração.
    <br /><br />
    <asp:Button ID="Button1" runat="server" PostBackUrl="~/Default.aspx" Text="Retorna à página Principal" />
</asp:Content>

O leiaute da página é exibido abaixo:

4 - Login.aspx

A página de login será exibida sempre que um usuário não logado tentar acessar o site. Esta pasta será criada na raiz do site.

No menu PROJECT clique em Add New Item e selecione o template Web Form using Master Page e informe o nome Login.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página o controle: Login e na janela de propriedades altere os textos das labels e mensagens para o português conforme mostra o código abaixo:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Login.aspx.vb" Inherits="LoginASPNET.Login" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
     <asp:Login ID="Login1" runat="Server" 
        DestinationPageUrl="~/Default.aspx"  
        TitleText="Informe nome do Usuário e Senha :<br /><br />"
        CreateUserText="Novo Usuário?"
        CreateUserUrl="~/Login/Registrar.aspx"
        PasswordRecoveryText="Esqueceu a Senha?"
        PasswordRecoveryUrl="~/Login/Recupera.aspx" FailureText="Seu Login falhou, tente novamente" 
         PasswordLabelText="Senha:" PasswordRequiredErrorMessage="A senha é obrigatória" 
         RememberMeText="Lembre-me da próxima vez." UserNameLabelText="Usuário :" 
         UserNameRequiredErrorMessage="O usuário é obrigatório" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" BorderWidth="1px" 
Font-Names="Verdana" Font-Size="10pt" Height="214px" Width="354px" >
         <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:Login>
</asp:Content>

O leiaute da página é visto abaixo:

Aplique o Auto Format selecionando a opção Elegant.

Abaixo vemos a exibição da página no navegador:

Observe os links para as páginas :

4 - Registrar.aspx

A página Registrar.aspx permite registrar um novo usuário. Esta página esta contida na pasta Login.

Clique com o botão direito sobre a pasta Login e selecione Add -> New Item;

Selecione o template Web Form using Master Page e informe o nome Registrar.aspx.

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página o controle: CreateUserWizard e na janela de propriedades altere os textos das labels e mensagens para o português conforme mostra o código abaixo:

<%@ Page Title="Registro de Usuário" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Registrar.aspx.vb" Inherits="LoginASPNET.Registrar" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

    <asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ContinueDestinationPageUrl="~/Default.aspx"
     CreateUserButtonText="Criar Conta" AnswerLabelText="Questão de Segurança" AnswerRequiredErrorMessage="A questão de segurança é obrigatória" 
CancelButtonText="Cancela" CompleteSuccessText="Sua conta foi criada com sucesso" ConfirmPasswordCompareErrorMessage="As senhas devem conferir" 
ConfirmPasswordLabelText="Confirmar Senha" ConfirmPasswordRequiredErrorMessage="A confirmação é obrigatória" ContinueButtonText="Continuar" 
DuplicateEmailErrorMessage="O e-mail que você informou já esta sendo usado. Informe outro email" DuplicateUserNameErrorMessage="Informe outro nome de usuário" 
EmailRegularExpressionErrorMessage="Informe outro email" EmailRequiredErrorMessage="Informe o E-mail" FinishCompleteButtonText="Encerrar" FinishPreviousButtonText="Anterior" 
InvalidAnswerErrorMessage="Informe outra questão de segurança" InvalidEmailErrorMessage="Informe um e-mail válido" InvalidPasswordErrorMessage="Tamanho mínimo da senha: {0}. 
Caracteres não alfanuméricos requeridos: {1}." InvalidQuestionErrorMessage="Informe uma questão de segurança diferente" PasswordLabelText="Senha:" 
PasswordRegularExpressionErrorMessage="Informe outra senha" PasswordRequiredErrorMessage="Informe a Senha" QuestionLabelText="Questão de Segurança:" 
QuestionRequiredErrorMessage="A questão de segurança é obrigatória" StartNextButtonText="Próximo" StepNextButtonText="Próximo" StepPreviousButtonText="Anterior" 
UnknownErrorMessage="Sua conta não foi criada. Tente novamente" UserNameLabelText="Usuário:" UserNameRequiredErrorMessage="Informe o usuário" BackColor="#F7F7DE" 
BorderColor="#CCCC99" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="10pt">
          <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
          <WizardSteps> 
       <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
        </asp:CreateUserWizardStep>
          <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
         </asp:CompleteWizardStep>
         </WizardSteps> 
          <ContinueButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" ForeColor="#284775" />
          <CreateUserButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" ForeColor="#284775" />
          <MailDefinition From="Admin@pirata.com" Subject="Sua nova conta" BodyFileName="~/Login/NovoUsuario.txt" />
          <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" HorizontalAlign="Center" />
          <NavigationButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" ForeColor="#284775" />
          <SideBarButtonStyle BorderWidth="0px" Font-Names="Verdana" ForeColor="#FFFFFF" />
          <SideBarStyle BackColor="#7C6F57" BorderWidth="0px" Font-Size="0.9em" VerticalAlign="Top" />
          <StepStyle BorderWidth="0px" />
         </asp:CreateUserWizard>
</asp:Content>

Note que um email é enviado ao usuário com o texto do arquivo NovoUsuario.txt que também esta contido na pasta Login.

Para criar este arquivo clique com o botão direito do mouse sobre a pasta Login e selecione Add -> New Item;

A seguir clique na guia General e selecione Text File informando o nome NovoUsuario.txt.

Digite o texto abaixo neste arquivo:

Obrigado por criar a sua conta no web site Macoratti.net

Seu nome de usuário é : <%UserName%>
Sua senha é : <%Password%>

O leiaute da página é exibido abaixo:

Aplique o Auto Format selecionando a opção Elegant.

Abaixo vemos a exibição desta página no navegador:

5 - Recupera.aspx

A página Recupera.aspx permite ao usuário recuperar uma senha esquecida. Esta página esta contida na pasta Login.

Clique com o botão direito sobre a pasta Login e selecione Add -> New Item;

Selecione o template Web Form using Master Page e informe o nome Recupera.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página o controle: PasswordRecovery e na janela de propriedades altere os textos das labels e mensagens para o português conforme mostra o código abaixo:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Recupera.aspx.vb" Inherits="LoginASPNET.Recupera" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

    <asp:PasswordRecovery ID="PasswordRecovery1" runat="server"
      SuccessPageUrl="~/Login/Recuperada.aspx" AnswerRequiredErrorMessage="A resposta é requerida" 
        UserNameRequiredErrorMessage="O usuário é requerida" UserNameLabelText="Usuário:" 
        UserNameTitleText="Esqueceu a Senha?" UserNameInstructionText="Informe o seu usuário para receber a senha" 
        AnswerLabelText="Resposta:" GeneralFailureText="Não foi possível recuperar a sua senha. Tente novamente." 
        QuestionFailureText="Sua resposta não pode ser verificada" QuestionLabelText="Questão:" 
        QuestionTitleText="Confirmação de identidade" QuestionInstructionText="Responda à pergunta para receber a senha" 
        SuccessText="A senha foi enviada" UserNameFailureText="Não foi possível acessar sua informação" 
        SubmitButtonText="Submeter" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" BorderWidth="1px" 
        Font-Names="Verdana" Font-Size="10pt">
        <MailDefinition From="admin@macoratti.com" Subject="Recuperação de Senha" BodyFileName="~/Login/MensagemSenha.txt"> 
        </MailDefinition>
        <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
    </asp:PasswordRecovery>

</asp:Content>

Note que um email é enviado ao usuário com o texto do arquivo MensagemSenha.txt que também esta contido na pasta Login.

Para criar este arquivo clique com o botão direito do mouse sobre a pasta Login e selecione Add -> New Item;

A seguir clique na guia General e selecione Text File informando o nome MensagemSenha.txt:

A seguir digite o texto abaixo neste arquivo:

Recuperação de senha.

Seu nome de usuário é : <%UserName%>
Sua senha é : <%Password%>

O leiaute da página é vista abaixo:

Aplique o Auto Format selecionando a opção Elegant.

A seguir temos a página exibida no navegador:

6 - Recuperada.aspx

A página que confirma que a senha foi recuperada exibe uma mensagem ao usuário e contém um botão que permite navegar para a página Default.aspx.

Clique com o botão direito sobre a pasta Login e selecione Add -> New Item;

Selecione o template Web Form using Master Page e informe o nome Recuperada.aspx:

Arraste a partir da ToolBox para a página o controle: Button e defina a propriedade PostBackUrl igual a ~/Default.aspx conforme mostra o código abaixo:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="Recuperada.aspx.vb" 
Inherits="LoginASPNET.Recuperada" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
 Sua senha foi enviada para o seu email cadastrado.
 Verifica a sua caixa de entrada.<br /><br />
  <asp:Button ID="Button1" runat="server" PostBackUrl="~/Default.aspx" Text="Continuar" />
</asp:Content>

O leiaute da página é mostrado a seguir:

7 - AlteraSenha.aspx

Esta página permite que o usuário altere sua senha. Esta página esta na raiz do site.

No menu PROJECT clique em Add New Item e selecione o template Web Form using Master Page e informe o nome AlteraSenha.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página o controle: ChangePassword e na janela de propriedades altere os textos das labels e mensagens para o português conforme mostra o código abaixo:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="AlteraSenha.aspx.vb" 
Inherits="LoginASPNET.AlteraSenha" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:ChangePassword ID="ChangePassword1" runat="server"
      ChangePasswordTitleText="Altere a sua senha<br /><br />"
       PasswordLabelText="Informe a Senha Atual:"
       NewPasswordLabelText="Informe a nova Senha:"
       ConfirmNewPasswordLabelText="Confirme a nova Senha:" CancelButtonText="Cancela" ChangePasswordButtonText="Alterar Senha" 
ChangePasswordFailureText="Senha incorreta ou nova Senha inválida. Tamanho mínimo da senha {0}. Caracteres não alfanuméricos requeridos: {1}." 
ConfirmPasswordCompareErrorMessage="As senhas não conferem" ConfirmPasswordRequiredErrorMessage="A nova senha deve ser confirmada" 
ContinueButtonText="Continuar" NewPasswordRegularExpressionErrorMessage="Informe uma senha diferente" 
NewPasswordRequiredErrorMessage="A nova senha deve ser informada" PasswordRequiredErrorMessage="A senha é obrigatória" 
SuccessText="Sua senha foi alterada !" SuccessTitleText="Alteração de senha finalizada" UserNameLabelText="Usuário:" 
UserNameRequiredErrorMessage="Nome do usuário deve ser informado" BackColor="#F7F7DE" BorderColor="#CCCC99" BorderStyle="Solid" 
BorderWidth="1px" Font-Names="Verdana" Font-Size="10pt"
     >
    <TitleTextStyle BackColor="#6B696B" Font-Bold="True" ForeColor="#FFFFFF" />
</asp:ChangePassword>
</asp:Content>

O leiaute desta página é visto a seguir:

8 - ListaUsuarios.aspx

Esta página permite exibir uma lista de usuários logados no site. Esta página esta na raiz do site.

No menu PROJECT clique em Add New Item e selecione o template Web Form using Master Page e informe o nome ListaUsuarios.aspx:

A seguir selecione a master page : Mestre.Master e clique em OK;

Arraste a partir da ToolBox para a página os controle: Label e Button definindo suas propriedades conforme o código abaixo:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Mestre.Master" CodeBehind="ListaUsuarios.aspx.vb" 
Inherits="LoginASPNET.ListaUsuarios" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <br />
    Usuários On-line :
    <br /><br />
    <asp:Label ID="lblUsuarios" runat="server" />
   <br /><br />
    <asp:Button ID="Button1" runat="server" Text="Continuar" PostBackUrl="~/Default.aspx"/>
</asp:Content>

O leiaute da página é exibido a seguir:

Esta página possui no evento Load o código que permite obter a relação dos usuários on-line.

O código do evento Load da página é dado a seguir:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim usuarios As MembershipUserCollection
        usuarios = Membership.GetAllUsers()

        For Each user As MembershipUser In usuarios
            If user.IsOnline Then
                lblUsuarios.Text += user.UserName + "<br />"
            End If
        Next

    End Sub

A lista de usuários retorna os nomes dos usuários a partir da classe MemberShip usando o método GetAllUsers() verificando se o usuário esta on-line.

Os valores são exibidos em um controle Label.

Abaixo vemos a página sendo exibida no navegador:

Criamos assim todas as páginas necessárias ao fluxo de informação que desenhamos para a nossa aplicação de autenticação de usuários. Note que usamos pouco código para realizar a nossa implementação usando os controles existente para realizar a autenticação e autorização.

Pegue o projeto completo aqui: Aplicacao_Autenticacao.zip

Mat 6:7 E, orando, não useis de vãs repetições, como os gentios; porque pensam que pelo seu muito falar serão ouvidos.
Mat 6:8
Não vos assemelheis, pois, a eles; porque vosso Pai sabe o que vos é necessário, antes de vós lho pedirdes.

Referências:


José Carlos Macoratti