visão geral de segurança ASP.NET

Este artigo fornece uma introdução à segurança ASP.NET, refere-se aos seguintes namespaces da Biblioteca de Classes do Microsoft .NET Framework:

  • System.Web.Security
  • System.Web.Principal

Versão original do produto: ASP.NET
Número original do KB: 306590

Resumo

ASP.NET oferece mais controle para implementar a segurança do seu aplicativo. ASP.NET segurança 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 ASP.NET. ASP.NET também inclui um recurso de segurança baseado em função que você pode implementar para contas de usuário windows e não Windows.

Este artigo é dividido nas seguintes seções:

Fluxo de segurança com uma solicitação

As etapas a seguir descrevem a sequência de eventos quando um cliente faz uma solicitação:

  1. Um cliente solicita uma página .aspx que reside em um servidor IIS.
  2. As credenciais do cliente são passadas para o IIS.
  3. O IIS autentica o cliente e encaminha o token autenticado junto com a solicitação do cliente para o processo de trabalho ASP.NET.
  4. Com base no token autenticado do IIS e nas configurações do aplicativo Web, ASP.NET decide se deve representar um usuário no thread que está processando a solicitação. Em uma diferença distinta entre ASP (Active Server Pages) e ASP.NET, ASP.NET não representa mais o usuário autenticado por padrão. Para habilitar a representação, você deve definir o atributo de representação da seção identidade no arquivo Web.config como true.

Para obter mais informações sobre o fluxo de segurança, consulte ASP.NET Fluxo de Dados.

Para obter mais informações sobre a representação em ASP.NET, consulte Como implementar a representação em um aplicativo ASP.NET.

O IIS mantém as configurações de configuração relacionadas à segurança na metabase do IIS. No entanto, ASP.NET mantém configurações de configuração de segurança (e outras) em arquivos de configuração XML (Linguagem de Marcação Extensível). Embora isso geralmente simplifique a implantação do seu aplicativo do ponto de vista de segurança, o modelo de segurança adotado pelo aplicativo requer a configuração correta da metabase do IIS e do aplicativo ASP.NET por meio do arquivo de configuração (Web.config).

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

Autenticação

A autenticação é o processo pelo qual você obtém credenciais de identificação, como nome e senha do usuário, e valida essas credenciais em alguma autoridade.

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

Autenticação de formulários

A autenticação de formulários refere-se a um sistema no qual solicitações não autenticadas são redirecionadas para um formulário HTML (Linguagem de Marcação de Hipertexto) no qual os usuários digitam suas credenciais. Depois que o usuário fornece credenciais e envia o formulário, o aplicativo autentica a solicitação e o sistema emite um tíquete de autorização na forma de um cookie. Este cookie contém as credenciais ou uma chave para readquirir a identidade. As solicitações subsequentes do navegador incluem automaticamente o cookie.

Para obter mais informações sobre a autenticação do Forms, consulte O Provedor de Autenticação de Formulários.

Para obter mais informações ASP.NET, consulte Como implementar Forms-Based autenticação no aplicativo ASP.NET usando c#.NET.

autenticação

Em autenticação do Windows, o IIS executa a autenticação e o token autenticado é encaminhado para o processo de trabalho ASP.NET. A vantagem de usar autenticação do Windows é que ela requer codificação mínima. Talvez você queira usar autenticação do Windows para representar a conta de usuário do Windows autenticada pelo IIS antes de entregar a solicitação para ASP.NET.

Para obter mais informações sobre autenticação do Windows, consulte O Provedor WindowsAuthenticationModule.

Autenticação de passaporte

A autenticação de passaporte é um serviço de autenticação centralizado, que a Microsoft fornece, que oferece um único logon e serviços de perfil principais para sites membros. Normalmente, a autenticação passport é usada quando você precisa de recursos de entrada única em vários domínios.

Para obter mais informações sobre a autenticação do Passport, consulte O Provedor de Autenticação de Passaporte.

Autenticação padrão

A autenticação padrão é usada quando você não deseja nenhuma segurança em seu aplicativo Web; O acesso anônimo é necessário para esse provedor de segurança. Entre todos os provedores de autenticação, a autenticação padrão fornece desempenho máximo para seu aplicativo. Esse provedor de autenticação também é usado quando você usa seu próprio módulo de segurança personalizado.

Authorization

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

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

Autorização de arquivo

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

Autorização de url

A UrlAuthorizationModule classe executa autorização de URL (Uniform Resource Locator), que controla a autorização com base no namespace do URI (identificador de recurso uniforme). Os namespaces do URI podem ser diferentes dos caminhos de arquivo e pasta física que as permissões NTFS usam.

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

Para obter mais informações sobre a autorização no ASP.NET, consulte ASP.NET Autorização.

Segurança baseada em função

A segurança baseada em função em ASP.NET é semelhante à segurança baseada em função que o Microsoft COM+ e o MTS (Microsoft Transaction Server) usam, embora haja diferenças importantes. A segurança baseada em função no ASP.NET não se limita a contas e grupos do Windows. Por exemplo, se autenticação do Windows e representação estiverem habilitados, a identidade do usuário será uma identidade do Windows (User.Identity.Name = "Domain\username"). Você pode marcar identidades para associação em funções específicas e restringir o acesso de acordo. Por exemplo:

Código .NET do Visual Basic

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 .NET do Visual C#

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 a autenticação do Forms, as funções não serão atribuídas ao usuário autenticado; você deve fazer isso programaticamente. Para atribuir funções ao usuário autenticado, use o OnAuthenticate evento do módulo de autenticação (que é o módulo de autenticação do Forms neste exemplo) para criar um novo GenericPrincipal objeto e atribuí-lo à propriedade User do HttpContext. O código a seguir ilustra isso:

Código .NET do Visual Basic

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 .NET do Visual C#

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 marcar se o usuário estiver em uma função específica e restringir o acesso de acordo, use o seguinte código (ou semelhante) em suas páginas .aspx:

Código .NET do Visual Basic

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

Código .NET do Visual C#

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 mais informações sobre segurança baseada em função, consulte Segurança baseada em função.

Referências

Para obter mais informações gerais sobre ASP.NET, consulte o seguinte grupo de notícias:

ASP.NET grupo de notícias

Para obter mais informações, confira o seguinte artigo ou livros: