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: