Você sabe como restringir o acesso a todas as páginas de sua aplicação ASP .NET permitindo o acesso somente a usuários autorizados ?
Se não sabe, hoje você vai aprender...
Para fazer isso basta alterar as configurações do arquivo Web.config da sua aplicação para especificar a autenticação de formulários, e crie uma página de login para coletar credenciais de usuário e completar a verificação de autenticação.
Para mostrar como fazer isso vamos criar uma aplicação Web Forms usando o Visual Web Developer 2010 Express Edition.(VWD 2010)
Abra o VWD 2010 e clique no menu File->New Project selecionando o template ASP .NET Empty Web Application informando o nome RestricaoAcesso;
Eu vou usar a linguagem Visual Basic mas você pode escolher a linguagem C#.
Será criado uma solução contendo apenas o arquivo Web.Config;
Abra o arquivo Web.Config e faça o seguinte:
1- Defina o atributo mode do elemento <authentication> como Forms;
<authentication mode="Forms">
2- Adicione um elemento filho <forms> ao elemento <authentication> para especificar os aspectos chaves da implementação de formulários. Abaixo temos a configuração que vamos usar no exemplo do artigo:
........ <authentication mode="Forms"> <forms name=".RestricaoAcesso" loginUrl="Login.aspx" protection="All" timeout="30" path="/"> </forms> </authentication> ........ |
3- Adicione os elementos filhos <deny> e <allow> ao elemento <authorization> para negar o acesso aos usuários anônimos e permitir o acesso a todos os usuários autenticados;
<authorization> <deny users="?" /> <!-- Nega o acesso para usuário anônimo --> <allow users="*" /> <!-- Permite o acesso a todos os usuários autenticados --> </authorization> |
4- Inclua um novo Web Form com o nome Login.aspx via menu Project -> Add New Item -> Web Form;
5- Inclua um novo Web Form com o nome Default.aspx via menu Project -> Add New Item -> Web Form, e define este formulário como o formulário de início da aplicação clicando sobre o nome do mesmo com o botão direito do mouse e selecionando a opção : Set As Start Page;
6- Inclua um novo Web Form com o nome AcessoRestrito.aspx via menu Project -> Add New Item -> Web Form;
Neste momento teremos uma solução contendo um projeto com 3 Web Forms e um arquivo Web.Config;
7- Inclua no formulário Login.aspx um controle Login a partir da ToolBox, guia Login, e personalize o componente conforme as suas necessidades.
No Exemplo usado neste artigo a página Login.aspx terá a seguinte aparência e código:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Login.aspx.vb" Inherits="RestricaoAcesso.Login" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <form runat="server"> <asp:login runat="server" BorderPadding="4" BorderStyle="Solid" BorderWidth="1px" FailureText="Lógin inválido, tente novamente" Font-Names="Verdana" Font-Size="Medium" Height="185px" PasswordLabelText="Senha :" PasswordRequiredErrorMessage="A senha é obrigatória." RememberMeText="Lembrar-me da próxima vez" UserNameLabelText="Usuário :" UserNameRequiredErrorMessage="O usuário é obrigatório." Width="339px" onauthenticate="Login_Authenticate"> <InstructionTextStyle Font-Italic="True" ForeColor="Black" /> <LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" /> <TextBoxStyle Font-Size="0.8em" /> <TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" /> </asp:login> </form> <br /> <input type="button" value="Tentativa de acesso sem Login" onclick="document.location='Default.aspx'" style="width: 347px" /> </html> |
No arquivo code-behind Default.aspx.vb faça o seguinte:
8- Use o manipulador de evento Authenticate do controle Login para verificar as credenciais do usuário;
9- Se as credenciais do usuário são válidas, crie um cookie de autenticação Forms e adicione-o à coleção de cookies retornado para o navegador, chamando o método SetAuthCookie da classe FormsAuthentication;
10- (Opcional) Defina o cookie de autenticação Forms para ser mantido na máquina do cliente;
11- Redirecione o usuário para a página inicial apropriada da aplicação usando Response.Redirect;
Protected Sub Login_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) 'nome do parâmetro querystring contendo a URL de retorno Const URL_RETORNO As String = "ReturnURL" Dim dbConn As OleDbConnection = Nothing Dim dCmd As OleDbCommand = Nothing Dim dr As OleDbDataReader = Nothing Dim strConnection As String Dim strSQL As String Dim proximaPagina As String Try 'obtem a string de conexão do arquivo web.config e abre a conexão com o banco de dados strConnection = ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString dbConn = New OleDb.OleDbConnection(strConnection) dbConn.Open() 'verifica se o usuário exite no banco de dados strSQL = "SELECT Nome AS NomeUsuario " & _ "FROM Usuarios " & _ "WHERE LoginID=? AND " & "Password=?" dCmd = New OleDbCommand(strSQL, dbConn) dCmd.Parameters.Add(New OleDbParameter("LoginID", ControleLogin.UserName)) dCmd.Parameters.Add(New OleDbParameter("Password", ControleLogin.Password)) dr = dCmd.ExecuteReader() If (dr.Read()) Then 'O usuário foi autenticado FormsAuthentication.SetAuthCookie(CStr(dr.Item("Nome")), ControleLogin.RememberMeSet) 'obtem a proxima pagina para o usuário If (Not IsNothing(Request.QueryString(URL_RETORNO))) Then 'usuario tentou acessar a pagina sem login 'logo será redirecionado para pagina original requisitada proximaPagina = Request.QueryString(URL_RETORNO) Else 'usuário veio direto para página de Login então direciona para a página Default proximaPagina = "Default.aspx" End If 'Redireciona o usuário para a proxima pagina Response.Redirect(proximaPagina, True) Else 'o usuário não existe no banco de dados envia uma mensagem indicando o problema ControleLogin.FailureText = "Login ID ou password Incorretos. " & "verifique e tente novamente." End If Finally 'libera recursos usados If (Not IsNothing(dr)) Then dr.Close() End If If (Not IsNothing(dbConn)) Then dbConn.Close() End If End Try End Sub |
O código esta comentado e creio que não necessito entrar em mais detalhes.
Pegue o projeto completo aqui: RestricaoAcesso.zip
Rom 8:1
Portanto, agora nenhuma condenação há para os que estão em Cristo Jesus.Referências: