Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.SecuritySystem.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
- Definições de configuração relacionadas
- Autenticação
- Autorização
- Segurança baseada em Função
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:
- Um cliente solicita uma página .aspx que reside em um servidor IIS.
- As credenciais do cliente são passadas para o IIS.
- O IIS autentica o cliente e encaminha o token autenticado junto com a solicitação do cliente para o processo de trabalho ASP.NET.
- 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.
Definições de configuração relacionadas
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:
Para obter mais informações, consulte o seguinte artigo ou livros:
PROBLEMA: Request.ServerVariables("LOGON_USER") retorna uma string vazia em ASP.NET
Reilly, Douglas J. Projetando aplicativos ASP.NET da Microsoft. Imprensa da Microsoft, 2001.
Esposito, Dino. Construindo soluções web com ASP.NET e ADO.NET. Imprensa da Microsoft, 2001.