Visão geral da segurança do 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 do IIS (Serviços de Informações da Internet) 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 está 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 definições de configuração do aplicativo Web, ASP.NET decide se deseja 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 impersonate da seção de 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 como representar no ASP.NET, consulte Como implementar a representação em um aplicativo ASP.NET.

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

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

Autenticação

Autenticação é o processo pelo qual você obtém credenciais de identificação, como o nome e a senha do usuário, e valida essas credenciais em relação a 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 (Hypertext Markup Language) 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 de formulários, consulte O provedor de autenticação de formulários.

Para obter mais informações sobre a autenticação de formulários no ASP.NET, consulte Como implementar a autenticação baseada em formulários em seu aplicativo ASP.NET usando C#.NET.

autenticação do Windows

Na 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 a autenticação do Windows é que ela requer codificação mínima. Talvez você queira usar a autenticação do Windows para representar a conta de usuário do Windows que o IIS autentica antes de entregar a solicitação ao ASP.NET.

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

Autenticação de passaporte

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

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

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 este 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.

Autorização

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 a autenticação do Windows. FileAuthorizationModule é responsável por executar verificações nas ACLs (Listas de Controle de Acesso) do Windows para determinar se um usuário deve ter acesso.

Autorização de URL

A UrlAuthorizationModule classe executa a autorização do Uniform Resource Locator (URL), que controla a autorização com base no namespace do URI (Uniform Resource Identifier). Os namespaces de URI podem ser diferentes da pasta física e dos caminhos de arquivo 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 gerente, testadores e administradores) e verbos (como GET e POST).

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

Segurança baseada em função

A segurança baseada em função no ASP.NET é semelhante à segurança baseada em função que o Microsoft COM+ e o Microsoft Transaction Server (MTS) 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 a autenticação e a representação do Windows estiverem habilitadas, a identidade do usuário será uma identidade do Windows (User.Identity.Name = "Domain\username"). Você pode verificar identidades para associação em funções específicas e restringir o acesso de acordo. Por exemplo:

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

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

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 de acordo, use o seguinte código (ou similar) em suas páginas .aspx:

Código 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

Código Visual C# .NET

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 informações mais gerais sobre ASP.NET, consulte o seguinte grupo de notícias:

ASP.NET grupo de notícias

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