Autenticação em ASP.NET
Enrique Pimentel Leite de Oliveira
[email protected]
Introdução
Segurança de sistemas Web é um assunto
complexo e muitas vezes confuso, porém
necessário.
Esse tipo de segurança envolve validação das
credencias de usuários (autenticação) e
permissão de acesso aos recursos
(autorização).
Em ASP .NET, existem diversas formas de
implementar segurança em páginas Web.
Autenticação e Autorização
A autenticação e a autorização devem ser configuradas de forma correta
para que a segurança da aplicação Web funcione adequadamente.
A autenticação é o processo de identificação do usuário que está
requisitando a informação. O usuário é identificado por uma credencial,
normalmente um nome de usuário e uma senha.
O objetivo da autenticação é garantir que a pessoa é quem está dizendo
que é.
Se a autenticação falhar (credenciais inválidas) o acesso será negado a um
usuário desconhecido
Por outro lado, se a credencial for válida o acesso será permitido.
Uma vez fornecida a identificação do usuário, o sistema definirá quais
recursos poderão ser acessados. Esse processo conhecido como
autorização, visa estabelecer níveis de acesso aos recursos.
Processo típico de Segurança
Credenciais do
usuário
Não
Autenticado?
Sim
Tenta acessar o
recurso
Acesso Negado
Não
Autorizado?
Sim
Acesso ao
recurso
Configurando a aplicação Web
A configuração da autenticação e autorização no
ASP .NET é realizado no arquivo web.config e,
quando necessário nas configurações do IIS.
Atenção: Erro na configuração do web.config
podem causar erros inesperados na aplicação.
Autenticação
A sintaxe da tag <authentication>, utilizada para
configurar a autenticação é:
<authentication mode="Windows|Forms|Passport|None">
<forms name="name"
loginUrl="url"
protection="All|None|Encryption|Validation"
timeout="30" path="/"
requireSSL="true|false"
slidingExpiration="true|false">
<credentials passwordFormat="Clear|SHA1|MD5">
<user name="username" password="password"/>
</credentials>
</forms>
<passport redirectUrl="internal"/>
</authentication>
Autorização
A sintaxe da tag <authentication>, utilizada
para configurar a autenticação é:
<authorization>
<allow users="comma-separated list of users"
roles="comma-separated list of roles“
verbs="comma-separated list of verbs"/>
<deny users="comma-separated list of users“
roles="comma-separated list of roles“
verbs="comma-separated list of verbs"/>
</authorization>
Autorização
Subtag
Descrição
<allow>
Permite acesso aos recursos basedo em:
users: Uma lista sepadara por vígula de nomes que estão autorizados à acessar os resursos. Um ponto de
interrogação (?) permite usuários anônimos; um asterisco (*) permite todos os usuários.
roles: Uma lista separada por vírgulas de regras que dão acesso aos recursos.
verbs: uma lista separada por vírgulas de métodos de transmissão HTTP que podem ser utilizados para acessar
os recursos. Os Verbs registrados para o ASP.NET são GET, HEAD, POST, e DEBUG.
<deny>
Impossibilita o acesso aos recursos basedo em:
users: Uma lista separada por vírgulas de nomes de usuários que não têm acesso ao recurso. Um ponto de
interrogação (?) indica que usuários anônimos não tem acesso; um asterísco (*) indica que todos os
usuários não tem acesso.
roles: Uma lista separada por vírgulas de regras que não permitem acesso aos recursos.
verbs: uma lista separada por vírgulas de métodos de transmissão HTTP que não podem ser utilizados para
acessar os recursos. Os Verbs registrados para o ASP.NET são GET, HEAD, POST, e DEBUG.
Provedores de autenticação
O ASP.NET fornece 4 provedores de autenticação:
None – Sem autenticação
Forms – Confia em logon via formulário e cookies
Passport – Serviço de autenticação centralizado provido pela
Microsoft
Windows – baseado na autenticação do Windows, o IIS cuida da
autenticação
O provedor é especificado no arquivo Web.config
<!-- web.config file -->
<authentication
mode = "[Windows|Forms|Passport|None]">
</authentication>
Autenticação Passport
Este é um serviço de autenticação centralizado
provido pela Microsoft que oferece um único
logon e serviços específicos para os sites
ASP.NET participantes, em conjunto com o
Microsoft® Passport software development kit
(SDK), provê funcionalidades semelhantes a
autenticação Forms para usuários do Passport.
Autenticação Windows
Este provedor utiliza as potencialidades de
autenticação do IIS. Depois que o IIS completa
sua autenticação, ASP.NET usa a credencial da
identidade autenticada para autorizar o acesso.
Autenticação Forms
Com este provedor requisições não autenticadas são
redirecionada para um formulário HTML especificado.
O usuário pode então fornecer as credenciais necessárias, e
enviar o formulário de volta para o servidor. Se a aplicação
autenticar a requisição (usando lógica específica de aplicação), o
ASP.NET emite um cookie que contém as credenciais ou uma
chave para readquirir a identidade do cliente.
Requisições subseqüêntes são emitidas com o cookie no
cabeçalho da requisição, significando que autenticações
subseqüêntes são desnecessárias.
Autenticação Forms
Uma interface de usuário personalizada aceita credenciais do
usuário
Autenticação é efetuada de acordo com um banco de dados
usando código próprio, por exemplo.
Cliente
Requisição: Bemvindo.aspx
Servidor Web
Resposta: Login.aspx
Requisição: Login.aspx + dado
Resposta: Bemvindo.aspx + Cookie
Usuário autenticado
Autenticação Forms
O processo para autenticação via Forms é:
1. Um cliente faz um requisição à página segura;
2. Se a requisição não conter um cookie de autenticação válido,
o Web Server redireciona o usuário para a URL especificada
no atributo loginUrl da tag Authentication no arquivo
web.config;
3. Credenciais são fornecidas no ofrmulário e enviadas via
método post;
4. Se as credenciais forem válidas (isso pode ser determinado
de diferentes formas), o ASP.NET cria um cookie de
autenticação no cliente;
5. O usuário pode, então ser redirecionado de volta à página
inicialmente requisitada.
Autenticação Forms
IIS
Requisição cliente
Permissão
ASP.NET
Sim
Não
Cookie
autorizad
o?
Redireciona para
página de login
Usuário fornece
as credenciais
Acesso permitido
Acesso Negado
Não
Sim
Cria o cookie
Autenticado?
Autenticação Forms
Configurações necessárias para autenticação do tipo Forms.
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="401kApp" loginUrl="/login.aspx"></forms>
</authentication>
</system.web>
</configuration>
O exemplo acima configura um site com autenticação baseada
em formulário, especificando o nome do cookie e a págian de
login, utilizada se a autenticação inicial falhar.
Autenticação Forms
Quando a autenticação do tipo Forms é utilizada, torna-se
necessário impedir o acesso de usuários não autorizados (caso
contrário, por que ativar a autenticação do tipo Forms?). Para
isso utiliza-ses a tag <authorization>:
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="401kApp" loginUrl="/login.aspx"></forms>
</authentication>
<authorization>
<deny user=“?” /> <!-- acesso negado a usuário anônimos !-->
</authorization>
</system.web>
</configuration>
Autenticação Forms
Para utilizar as configurações realizadas no
web.config, deve-se criar:
1. Página de login (default.aspx), contendo dois
Textbox (usuário e senha) e um botão para
autenticação;
2. Uma página (restrito.aspx) com um label para testar
se a autenticação está funcionando.
Autenticação Forms
Código para autenticação do usuário (no evento
click do botão de login):
if (txtUsuario.Text == “nome” && txtSenha.Text == “1234”)
{
FormsAuthentication.SetAuthCookie(txtUsuario.Text,
false);
Response.Redirect(“restrito.aspx”);
}
else
//Exibir mensagem de erro de autenticação
Autenticação Forms
Após o usuário digitar suas credenciais, é realizada uma comparação
do usuário e senha.
Caso sejam iguais, o método SetAuthCookie da classe abstrata
FormsAuthentication, cria um cookie com o nome do usuário
(primeiro parâmetro). O segundo parâmetro especifica se o cookie
será ou não armazenado na máquina do cliente, para eventuais
novos acessos. Em seguida o usuário é direcionado para a página
restrito.aspx.
Se as credenciais forem inválidas, devemos exibir uma mensagem
de erro.
Autenticação Forms
Outro método da classe FormsAuthentication que podemos utilizar
para criar o “ticket” que possibilita o usuário acessar áreas restritas é
o RedirectFromLoginPage, que cria o cookie exatamente igual ao
SetAuthCookie, porém redireciona o usuário a página inicialmente
requisitada.
Caso a página requisitada seja a de login, esse método redireciona o
usuário para a página default.aspx.
if (txtUsuario.Text == “nome” && txtSenha.Text == “1234”)
{
FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text,
false);
}
else
//Exibir mensagem de erro de autenticação
Autenticação Forms
Após realizada a autenticação o usuário terá acesso a
todo conteúdo permitido do site.
Para finalizar a autenticação do usuário, utiliza-se o
método SignOut(), da classe FormsAuthentication, o
botão ou link de logout:
FormsAuthentication.SignOut();
Esse método remove o cookie de autenticação e força o
usuário realizar novo login, caso deseje acessar um
recurso restrito novamente.
Exercício
Criar um sistema (com MasterPage) o qual
possua 3 páginas sendo uma delas a de login.
Uma das páginas deverá possibilitar que o usuário
poste mensagens que deverão ser armazenadas em
um cookie.
A outra página deverá possibilitar ao usuário
visualizar as mensagens gravadas.
Na MasterPage deverá existir um link que possibilite
ao usuário fazer logout.
Bibliografia
Autenticação em ASP.NET
Linha de Código - ASP.NET Configurando a
segurança na sua aplicação
Protegendo o Aplicativo ASP.NET e os Web
Services
Payne, Chris. Teach Yourself ASP.NET in 21
Days, Second Edition. Sams
Download

Autenticação Forms - Objetivo Sorocaba