ID do artigo: 306590 - Última revisão: segunda-feira, 29 de outubro de 2007 - Revisão: 3.14

INFO: Visão geral sobre segurança do ASP.NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo se refere à seguintes Microsoft .NET Framework Class Library namespaces:
  • System.Web.Security
  • System.Web.Principal

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo fornece uma introdução ao ASP.NET segurança.

Para adicionais visões gerais sobre ASP.NET, consulte o seguinte artigo:
305140  (http://support.microsoft.com/kb/305140/EN-US/ ) INFO: Guia de ASP.NET

Mais Informações

ASP.NET fornece mais controle para implementar a segurança para seu aplicativo. Segurança do ASP.NET funciona em conjunto com a segurança dos serviços de informações da Internet (IIS) e inclui serviços de autenticação e autorização para implementar o modelo de segurança do ASP.NET. O ASP.NET também inclui um recurso de segurança baseada em função que você pode implementar para Microsoft Windows e contas de usuário não-Windows.

Este artigo está dividido em seções a seguir:

Fluxo de segurança com uma solicitação

As seguintes etapas descrevem a seqüência de eventos quando um cliente faz uma solicitação:
  1. Um cliente solicita uma página .aspx que reside em um IIS servidor.
  2. As credenciais do cliente são passadas para o IIS.
  3. O IIS autentica o cliente e encaminha o token autenticado com a solicitação do cliente para o processo do operador do ASP.NET.
  4. Com base no token autenticado do IIS e as configurações de aplicativo da Web, ASP.NET decide se a representar um usuário no thread que está processando a solicitação. Uma diferença distinta entre Microsoft Active Server Pages (ASP) e o ASP.NET, ASP.NET não representa o usuário autenticado por padrão. Para ativar a representação, você deve definir o atributo impersonate da seção de identidade no arquivo Web.config para true .
Para obter mais informações sobre o fluxo de segurança, consulte o tópico seguinte no .NET Framework Software Development Kit (SDK) documentação:
Fluxo de dados do ASP.NET
http://msdn.microsoft.com/en-us/library/xa68twcb(vs.71).aspx (http://msdn.microsoft.com/en-us/library/xa68twcb(vs.71).aspx)
Para obter informações adicionais sobre representação no ASP.NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
306158  (http://support.microsoft.com/kb/306158/EN-US/ ) INFO: Implementando a representação em um aplicativo ASP.NET

Configurações relacionadas

IIS mantém configurações relacionadas à segurança no IIS metabase. No entanto, o ASP.NET mantém segurança (e outros) configurações nos arquivos de configuração XML (Extensible Markup Language). Embora isso geralmente simplifica a implantação do seu aplicativo do ponto de vista da segurança, o modelo de segurança que seu aplicativo adota necessita a configuração correta do tanto a metabase do IIS e seu aplicativo ASP.NET por meio de seu arquivo de configuração (Web.config).

As seções de configuração a seguir estão relacionadas à segurança do ASP.NET:

Autenticação

Autenticação é o processo pelo qual você obter credenciais de identificação como nome e senha do usuário e valida essas credenciais contra alguma autoridade.

O ASP.NET fornece quatro provedores de autenticação:

Autenticação de formulários

Autenticação de formulários refere-se a um sistema no qual as solicitações não autenticadas são redirecionadas para um formulário HTML (Hypertext Markup Language) na qual os usuários digitam suas credenciais. Depois que o usuário fornece credenciais e submete o formulário, o aplicativo autenticar a solicitação e o sistema emite um tíquete de autorização na forma de um cookie. Esse cookie contém as credenciais ou uma chave para readquirir a identidade. As solicitações subseqüentes do navegador incluem automaticamente o cookie.

Para obter mais informações sobre autenticação de formulários, consulte o tópico seguinte no SDK do .NET Framework documentação:
O provedor de autenticação Forms
http://msdn.microsoft.com/en-us/library/907hb5w9(vs.71).aspx (http://msdn.microsoft.com/en-us/library/907hb5w9(vs.71).aspx)
Para obter informações adicionais autenticação de formulários no ASP.NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
301240  (http://support.microsoft.com/kb/301240/EN-US/ ) COMO: Implementar baseada em formulários autenticação no seu aplicativo ASP.NET usando o .NET translation from VPE for Csharp

Autenticação do Windows

Na autenticação do Windows, IIS executa a autenticação e o token autenticado é encaminhado para o processo do operador do ASP.NET. A vantagem de usar Windows autenticação é que ele requer um mínimo de codificação. Convém usar o Windows autenticação para representar a conta de usuário do Windows que o IIS autentica antes de você libere a solicitação para o ASP.NET.

Para obter mais informações sobre autenticação do Windows, consulte o tópico a seguir na documentação do .NET Framework SDK:
O Provedor WindowsAuthenticationModule
http://msdn.microsoft.com/en-us/library/907hb5w9(vs.71).aspx (http://msdn.microsoft.com/en-us/library/907hb5w9(vs.71).aspx)

Autenticação do Passport

Autenticação do Passport é um centralizado serviço de autenticação, que a Microsoft fornece, que oferece um logon único e principais serviços de perfil para sites membros. Normalmente, a autenticação do Passport é usada quando você precisar capacidade de logon único em vários domínios.

Para obter mais informações sobre autenticação do Passport, consulte o tópico a seguir na documentação do .NET Framework SDK:
O provedor de autenticação Passport
http://msdn.microsoft.com/en-us/library/f8e50t0f(vs.71).aspx (http://msdn.microsoft.com/en-us/library/f8e50t0f(vs.71).aspx)

Autenticação de padrão

Autenticação padrão é usada quando você não deseja qualquer segurança no seu aplicativo da Web; acesso anônimo é necessário para este provedor de segurança. Entre todos os provedores de autenticação, a autenticação de padrão fornece desempenho máximo do seu aplicativo. Este provedor de autenticação também é usado quando você usa seu próprio módulo de segurança personalizado.

Autorização

Autorização é o processo que verifica se o usuário autenticado tem acesso aos recursos solicitados.

O ASP.NET oferece os seguintes provedores de autorização:

FileAuthorization

A classe FileAuthorizationModule executa autorização de arquivo e está ativa quando você usa autenticação do Windows. FileAuthorizationModule é responsável por realizar verificações em Windows controle de acesso (ACLs) para determinar se um usuário deve ter acesso de listas.

UrlAuthorization

A classe UrlAuthorizationModule executa autorização de URL (Uniform Resource Locator), que controla a autorização com base no espaço para nome URI. Espaços para nome URI podem ser muito diferentes dos caminhos de pastas e arquivos físicos que usam as permissões de NTFS.

UrlAuthorizationModule implementa ambas as declarações de autorização positivos e negativos; ou seja, você pode usar o módulo para seletivamente permitir ou negar acesso a partes arbitrárias do espaço para nome URI para usuários, funções (como gerente, testadores e administradores) e verbos (como GET e POST).

Para obter mais informações sobre autorização no ASP.NET, consulte o tópico a seguir na documentação do .NET Framework SDK:
Autorização ASP.NET
http://msdn.microsoft.com/en-us/library/wce3kxhd(vs.71).aspx (http://msdn.microsoft.com/en-us/library/wce3kxhd(vs.71).aspx)

Segurança baseada em função

Segurança baseada em função no ASP.NET é semelhante para a segurança baseada em função que usa o Microsoft COM + e Microsoft Transaction Server (MTS), embora existem diferenças importantes. Segurança baseada em função no ASP.NET não está limitada a contas e grupos do Windows. Por exemplo, se a autenticação do Windows e representação estiver ativada, a identidade do usuário é uma identidade do Windows (User.Identity.Name = "Domain\username"). Você pode verificar identidades para participação em funções específicas e restringir o acesso adequadamente. Por exemplo:

código do Visual Basic .NET
If User.IsInRole("BUILTIN\Administrators") Then
   Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
   Response.Write("You are a User")
Else
   Response.Write("Invalid user")
End if
				
Código do .NET translation from VPE for Csharp visual
if ( User.IsInRole("BUILTIN\\Administrators"))
   Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
   Response.Write("You are a User");
else
   Response.Write("Invalid user");
				
se você estiver usando autenticação de formulários, funções não são atribuídas para o usuário autenticado; você deve fazer isso programaticamente. Para atribuir funções para o usuário autenticado, use o evento OnAuthenticate do módulo de autenticação (que é o Forms módulo de autenticação neste exemplo) para criar um novo objeto GenericPrincipal e atribuí-lo à propriedade de usuário de HttpContext. O código a seguir ilustra isso:

código do Visual Basic .NET
Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
   If (Not(HttpContext.Current.User Is Nothing)) Then
      If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
         Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
         Dim myRoles(3) As String
         myRoles(0)= "managers"
         myRoles(1)= "testers"
         myRoles(2)= "developers"
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles) 
      End If
   End If
End Sub
				
Código do .NET translation from VPE for Csharp visual
public void Application_AuthenticateRequest(Object s, EventArgs e)      
{
   if (HttpContext.Current.User != null)
   {
      if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" ) 
      {
         System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
         String[] myRoles = new String[3];
         myRoles[0]= "managers";
         myRoles[1]= "testers";
         myRoles[2]= "developers";
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
      }
   }
} 
				
para verificar se o usuário está em uma função específica e restringir o acesso da mesma forma, use o seguinte código (ou semelhante) em suas páginas .aspx:

código do Visual Basic .NET
If User.IsInRole("managers") Then
   Response.Write("You are a Manager")
Else If  User.IsInRole("testers") Then
   Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
   Response.Write("You are a Developer")
End if
				
Visual C# .NET Code
if (User.IsInRole("managers"))
   Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
   Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
   Response.Write("You are a Developer");
				
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
306238  (http://support.microsoft.com/kb/306238/EN-US/ ) COMO: Implementar baseada em função a segurança com autenticação baseada em formulários no seu aplicativo ASP.NET usando o Visual Basic .NET
Para obter mais informações sobre segurança baseada em função, consulte o tópico a seguir na documentação do .NET Framework SDK:
Segurança baseada em função
http://msdn.microsoft.com/en-us/library/52kd59t0(vs.71).aspx (http://msdn.microsoft.com/en-us/library/52kd59t0(vs.71).aspx)

Referências

Para informações sobre diretrizes de segurança do ASP.NET, consulte o seguinte documento MSDN:
Autenticação no ASP.NET: guia de segurança do .NET
http://msdn.microsoft.com/en-us/library/ms978378.aspx (http://msdn.microsoft.com/en-us/library/ms978378.aspx)
Para obter informações mais gerais sobre o ASP.NET, consulte o seguinte grupo de notícias MSDN:
microsoft.public.dotnet.framework.aspnet (http://msdn.microsoft.com/newsgroups/default.aspx?query=microsoft.public.dotnet.framework.aspnet&dg=&cat=en-us-msdn&lang=en&cr=US&pt=&catlist=774F24A2-F71F-425F-AC2B-DC48AB0DA5C9&dglist=&ptlist=&exp=&sloc=en-us)
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
311094  (http://support.microsoft.com/kb/311094/EN-US/ ) Erro: Mensagem de erro "ConfigurationException" ao representado contas ler configuração
306359  (http://support.microsoft.com/kb/306359/EN-US/ ) PROBLEMA: Request.ServerVariables("LOGON_USER") retorna String vazio no ASP.NET
313091  (http://support.microsoft.com/kb/313091/EN-US/ ) COMO: Criar chaves usando Visual Basic .NET para uso em autenticação de formulários
313116  (http://support.microsoft.com/kb/313116/EN-US/ ) PROBLEMA: Solicitações de autenticação de formulários Are Not Directed para loginUrl Page
Para obter mais informações, consulte os seguintes manuais:
Reilly, Douglas j Designing Microsoft ASP.NET Applications (http://www.microsoft.com/mspress/books/toc/5136.aspx) . Microsoft Press, 2001.

Esposito, Dino. Building Web Solutions with ASP.NET and ADO.NET (http://www.microsoft.com/learning/en/us/Books/5727.aspx) . Microsoft Press, 2001.

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
Palavras-chave: 
kbmt kbproductlink kbarttyperoadmap kbconfig kbinfo kbsecurity kbweb KB306590 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 306590  (http://support.microsoft.com/kb/306590/en-us/ )