24
Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira Enrique Pimentel Leite de Oliveira [email protected] [email protected]

Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira [email protected]

Embed Size (px)

Citation preview

Page 1: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação em ASP.NETAutenticação em ASP.NET

Enrique Pimentel Leite de OliveiraEnrique Pimentel Leite de [email protected]@aes.edu.br

Page 2: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Introdução Introdução

Segurança de sistemas Web é um assunto Segurança de sistemas Web é um assunto complexo e muitas vezes confuso, porém complexo e muitas vezes confuso, porém necessário.necessário.

Esse tipo de segurança envolve validação Esse tipo de segurança envolve validação das credencias de usuários (autenticação) das credencias de usuários (autenticação) e permissão de acesso aos recursos e permissão de acesso aos recursos (autorização).(autorização).

Em ASP .NET, existem diversas formas de Em ASP .NET, existem diversas formas de implementar segurança em páginas Web.implementar segurança em páginas Web.

Page 3: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação e AutorizaçãoAutenticação e Autorização

A autenticação e a autorização devem ser configuradas de forma A autenticação e a autorização devem ser configuradas de forma correta para que a segurança da aplicação Web funcione correta para que a segurança da aplicação Web funcione adequadamente.adequadamente.

A autenticação é o processo de identificação do usuário que está A autenticação é o processo de identificação do usuário que está requisitando a informação. O usuário é identificado por uma requisitando a informação. O usuário é identificado por uma credencial, normalmente um nome de usuário e uma senha. credencial, normalmente um nome de usuário e uma senha. O objetivo da autenticação é garantir que a pessoa é quem está O objetivo da autenticação é garantir que a pessoa é quem está dizendo que é.dizendo que é.

Se a autenticação falhar (credenciais inválidas) o acesso será negado a Se a autenticação falhar (credenciais inválidas) o acesso será negado a um usuário desconhecidoum usuário desconhecidoPor outro lado, se a credencial for válida o acesso será permitido.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á Uma vez fornecida a identificação do usuário, o sistema definirá quais recursos poderão ser acessados. Esse processo conhecido quais recursos poderão ser acessados. Esse processo conhecido como autorização, visa estabelecer níveis de acesso aos recursos.como autorização, visa estabelecer níveis de acesso aos recursos.

Page 4: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Processo típico de SegurançaProcesso típico de Segurança

Credenciais do usuário

Autenticado?

Tenta acessar o recurso

Autorizado?

Acesso Negado

Acesso ao recurso

Não

Não

Sim

Sim

Page 5: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Configurando a aplicação WebConfigurando a aplicação Web

A configuração da autenticação e A configuração da autenticação e autorização no ASP .NET é realizado no autorização no ASP .NET é realizado no arquivo web.config e, quando necessário arquivo web.config e, quando necessário nas configurações do IIS.nas configurações do IIS.

AtençãoAtenção: Erro na configuração do : Erro na configuração do web.config podem causar erros web.config podem causar erros inesperados na aplicação.inesperados na aplicação.

Page 6: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

AutenticaçãoAutenticação

A sintaxe da tag A sintaxe da tag <authentication><authentication>, utilizada , utilizada para configurar a autenticação é:para configurar a autenticação é:

<authentication mode<authentication mode="Windows|Forms|Passport|None"="Windows|Forms|Passport|None">>

<forms name<forms name="name"="name"

loginUrlloginUrl="url" ="url"

protectionprotection="All|None|Encryption|Validation"="All|None|Encryption|Validation"

timeouttimeout="30" ="30" pathpath="/" ="/"

requireSSL=requireSSL="true|false""true|false"

slidingExpiration=slidingExpiration="true|false""true|false">>

<credentials passwordFormat<credentials passwordFormat="Clear|SHA1|MD5"="Clear|SHA1|MD5">>

<user name<user name="username" ="username" passwordpassword="password"="password"/>/>

</credentials></credentials>

</forms></forms>

<passport redirectUrl="<passport redirectUrl="internalinternal"/>"/>

</authentication></authentication>

Page 7: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

AutorizaçãoAutorização

A sintaxe da tag A sintaxe da tag <authentication><authentication>, , utilizada para configurar a autenticação é:utilizada para configurar a autenticação é:

<authorization> <authorization>

<allow users<allow users="="comma-separated list of userscomma-separated list of users" " rolesroles="="comma-separated list of rolescomma-separated list of roles““

verbsverbs="="comma-separated list of verbscomma-separated list of verbs""/>/>

<deny users<deny users="="comma-separated list of userscomma-separated list of users““

rolesroles="="comma-separated list of rolescomma-separated list of roles““

verbsverbs="="comma-separated list of verbscomma-separated list of verbs""/>/>

</authorization></authorization>

Page 8: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

AutorizaçãoAutorização

SubtagSubtag DescriçãoDescrição

<allow><allow> Permite acesso aos recursos basedo em:Permite acesso aos recursos basedo em:usersusers: Uma lista sepadara por vígula de nomes que estão autorizados à acessar os resursos. Um : 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 ponto de interrogação (?) permite usuários anônimos; um asterisco (*) permite todos os usuários.usuários.

rolesroles: Uma lista separada por vírgulas de regras que dão acesso aos recursos.: Uma lista separada por vírgulas de regras que dão acesso aos recursos.verbsverbs: uma lista separada por vírgulas de métodos de transmissão HTTP que podem ser utilizados : 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 para acessar os recursos. Os Verbs registrados para o ASP.NET são GET, HEAD, POST, e DEBUG.DEBUG.

<deny><deny> Impossibilita o acesso aos recursos basedo em:Impossibilita o acesso aos recursos basedo em:usersusers: Uma lista separada por vírgulas de nomes de usuários que não têm acesso ao recurso. Um : 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 (*) 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.indica que todos os usuários não tem acesso.

rolesroles: Uma lista separada por vírgulas de regras que não permitem acesso aos recursos.: Uma lista separada por vírgulas de regras que não permitem acesso aos recursos.verbsverbs: uma lista separada por vírgulas de métodos de transmissão HTTP que não podem ser : 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, utilizados para acessar os recursos. Os Verbs registrados para o ASP.NET são GET, HEAD, POST, e DEBUG.POST, e DEBUG.

Page 9: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Provedores de autenticaçãoProvedores de autenticação

O ASP.NET fornece 4 provedores de autenticação:O ASP.NET fornece 4 provedores de autenticação:None – Sem autenticaçãoNone – Sem autenticaçãoForms – Confia em logon via formulário e cookies Forms – Confia em logon via formulário e cookies Passport – Serviço de autenticação centralizado provido Passport – Serviço de autenticação centralizado provido pela Microsoft pela Microsoft Windows – baseado na autenticação do Windows, o IIS Windows – baseado na autenticação do Windows, o IIS cuida da autenticaçãocuida da autenticação

O provedor é especificado no arquivo Web.configO provedor é especificado no arquivo Web.config

<!-- web.config file --> <authentication

mode = "[Windows|Forms|Passport|None]"> </authentication>

Page 10: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação PassportAutenticação Passport

Este é um serviço de autenticação Este é um serviço de autenticação centralizado provido pela Microsoft que centralizado provido pela Microsoft que oferece um único logon e serviços oferece um único logon e serviços específicos para os sites ASP.NET específicos para os sites ASP.NET participantes, em conjunto com o participantes, em conjunto com o Microsoft® Passport software development Microsoft® Passport software development kit (SDK), provê funcionalidades kit (SDK), provê funcionalidades semelhantes a autenticação Forms para semelhantes a autenticação Forms para usuários do Passport.usuários do Passport.

Page 11: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação WindowsAutenticação Windows

Este provedor utiliza as potencialidades de Este provedor utiliza as potencialidades de autenticação do IIS. Depois que o IIS autenticação do IIS. Depois que o IIS completa sua autenticação, ASP.NET usa a completa sua autenticação, ASP.NET usa a credencial da identidade autenticada para credencial da identidade autenticada para autorizar o acesso. autorizar o acesso.

Page 12: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação Forms Autenticação Forms

Com este provedor requisições não autenticadas são Com este provedor requisições não autenticadas são redirecionada para um formulário HTML especificado.redirecionada para um formulário HTML especificado.

O usuário pode então fornecer as credenciais O usuário pode então fornecer as credenciais necessárias, e enviar o formulário de volta para o necessárias, e enviar o formulário de volta para o servidor. Se a aplicação autenticar a requisição (usando servidor. Se a aplicação autenticar a requisição (usando lógica específica de aplicação), o ASP.NET emite um lógica específica de aplicação), o ASP.NET emite um cookiecookie que contém as credenciais ou uma chave para que contém as credenciais ou uma chave para readquirir a identidade do cliente. readquirir a identidade do cliente.

Requisições subseqüêntes são emitidas com o Requisições subseqüêntes são emitidas com o cookiecookie no no cabeçalho da requisição, significando que autenticações cabeçalho da requisição, significando que autenticações subseqüêntes são desnecessárias.subseqüêntes são desnecessárias.

Page 13: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Uma interface de usuário personalizada aceita Uma interface de usuário personalizada aceita credenciais do usuáriocredenciais do usuário

Autenticação é efetuada de acordo com um banco de Autenticação é efetuada de acordo com um banco de dados usando código próprio, por exemplo.dados usando código próprio, por exemplo.

Cliente Requisição: Bemvindo.aspx

Resposta: Login.aspx

Requisição: Login.aspx + dado

Resposta: Bemvindo.aspx + Cookie

Servidor Web

Usuário autenticado

Page 14: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

O processo para autenticação via Forms é:O processo para autenticação via Forms é:1.1. Um cliente faz um requisição à página segura;Um cliente faz um requisição à página segura;2.2. Se a requisição não conter um cookie de autenticação Se a requisição não conter um cookie de autenticação

válido, o Web Server redireciona o usuário para a URL válido, o Web Server redireciona o usuário para a URL especificada no atributo loginUrl da tag Authentication especificada no atributo loginUrl da tag Authentication no arquivo web.config;no arquivo web.config;

3.3. Credenciais são fornecidas no ofrmulário e enviadas Credenciais são fornecidas no ofrmulário e enviadas via método post;via método post;

4.4. Se as credenciais forem válidas (isso pode ser Se as credenciais forem válidas (isso pode ser determinado de diferentes formas), o ASP.NET cria um determinado de diferentes formas), o ASP.NET cria um cookie cookie de autenticação no cliente;de autenticação no cliente;

5.5. O usuário pode, então ser redirecionado de volta à O usuário pode, então ser redirecionado de volta à página inicialmente requisitada. página inicialmente requisitada.

Page 15: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

ASP.NET

IIS

Autenticação FormsAutenticação Forms

Permissão

Cookie autorizad

o?

Redireciona para página de login

Acesso Negado

NãoSim

Requisição cliente

Usuário fornece as credenciais

Autenticado?Cria o cookie

Acesso permitido

NãoSim

Page 16: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Configurações necessárias para autenticação do tipo Configurações necessárias para autenticação do tipo Forms.Forms.

O exemplo acima configura um site com autenticação O exemplo acima configura um site com autenticação baseada em formulário, especificando o nome do baseada em formulário, especificando o nome do cookiecookie e a págian de login, utilizada se a autenticação inicial e a págian de login, utilizada se a autenticação inicial falhar.falhar.

<configuration> <system.web> <authentication mode="Forms"> <forms name="401kApp" loginUrl="/login.aspx"></forms> </authentication> </system.web></configuration>

Page 17: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Quando a autenticação do tipo Forms é utilizada, torna-Quando a autenticação do tipo Forms é utilizada, torna-se necessário impedir o acesso de usuários não se necessário impedir o acesso de usuários não autorizados (caso contrário, por que ativar a autorizados (caso contrário, por que ativar a autenticação do tipo Forms?). Para isso utiliza-ses a tag autenticação do tipo Forms?). Para isso utiliza-ses a tag <authorization>:<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>

Page 18: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Para utilizar as configurações realizadas no Para utilizar as configurações realizadas no web.config, deve-se criar:web.config, deve-se criar:

1.1. Página de login (default.aspx), contendo dois Página de login (default.aspx), contendo dois Textbox (usuário e senha) e um botão para Textbox (usuário e senha) e um botão para autenticação;autenticação;

2.2. Uma página (restrito.aspx) com um label para Uma página (restrito.aspx) com um label para testar se a autenticação está funcionando.testar se a autenticação está funcionando.

Page 19: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Código para autenticação do usuário (no Código para autenticação do usuário (no evento click do botão de login):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

Page 20: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Após o usuário digitar suas credenciais, é realizada uma Após o usuário digitar suas credenciais, é realizada uma comparação do usuário e senha. comparação do usuário e senha.

Caso sejam iguais, o método SetAuthCookie da classe Caso sejam iguais, o método SetAuthCookie da classe abstrata FormsAuthentication, cria um cookie com o nome abstrata FormsAuthentication, cria um cookie com o nome do usuário (primeiro parâmetro). O segundo parâmetro do usuário (primeiro parâmetro). O segundo parâmetro especifica se o cookie será ou não armazenado na máquina especifica se o cookie será ou não armazenado na máquina do cliente, para eventuais novos acessos. Em seguida o do cliente, para eventuais novos acessos. Em seguida o usuário é direcionado para a página restrito.aspx.usuário é direcionado para a página restrito.aspx.

Se as credenciais forem inválidas, devemos exibir uma Se as credenciais forem inválidas, devemos exibir uma mensagem de erro.mensagem de erro.

Page 21: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Outro método da classe FormsAuthentication que podemos Outro método da classe FormsAuthentication que podemos utilizar para criar o “ticket” que possibilita o usuário acessar utilizar para criar o “ticket” que possibilita o usuário acessar áreas restritas é o RedirectFromLoginPage, que cria o cookie áreas restritas é o RedirectFromLoginPage, que cria o cookie exatamente igual ao SetAuthCookie, porém redireciona o exatamente igual ao SetAuthCookie, porém redireciona o usuário a página inicialmente requisitada.usuário a página inicialmente requisitada.

Caso a página requisitada seja a de login, esse método Caso a página requisitada seja a de login, esse método redireciona o usuário para a página default.aspx.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

Page 22: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

Autenticação FormsAutenticação Forms

Após realizada a autenticação o usuário terá Após realizada a autenticação o usuário terá acesso a todo conteúdo permitido do site.acesso a todo conteúdo permitido do site.

Para finalizar a autenticação do usuário, utiliza-se Para finalizar a autenticação do usuário, utiliza-se o método SignOut(), da classe o método SignOut(), da classe FormsAuthentication, o botão ou link de logout:FormsAuthentication, o botão ou link de logout:

Esse método remove o cookie de autenticação e Esse método remove o cookie de autenticação e força o usuário realizar novo login, caso deseje força o usuário realizar novo login, caso deseje acessar um recurso restrito novamente.acessar um recurso restrito novamente.

FormsAuthentication.SignOut();

Page 23: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

ExercícioExercício

Criar um sistema (com MasterPage) o qual Criar um sistema (com MasterPage) o qual possua 3 páginas sendo uma delas a de possua 3 páginas sendo uma delas a de login.login.

Uma das páginas deverá possibilitar que o Uma das páginas deverá possibilitar que o usuário poste mensagens que deverão ser usuário poste mensagens que deverão ser armazenadas em um cookie.armazenadas em um cookie.

A outra página deverá possibilitar ao usuário A outra página deverá possibilitar ao usuário visualizar as mensagens gravadas.visualizar as mensagens gravadas.

Na MasterPage deverá existir um link que Na MasterPage deverá existir um link que possibilite ao usuário fazer logout. possibilite ao usuário fazer logout.

Page 24: Autenticação em ASP.NET Enrique Pimentel Leite de Oliveira enrique.leite@aes.edu.br

BibliografiaBibliografia

Autenticação em ASP.NETAutenticação em ASP.NET

Linha de Código - ASP.NET Configurando a Linha de Código - ASP.NET Configurando a segurança na sua aplicaçãosegurança na sua aplicação

Protegendo o Aplicativo ASP.NET e os Protegendo o Aplicativo ASP.NET e os WebWeb ServicesServices

Payne, Chris. Teach Yourself ASP.NET in 21 Payne, Chris. Teach Yourself ASP.NET in 21 Days, Second Edition. SamsDays, Second Edition. Sams