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
- Configurações relacionadas
- Autenticação
- Authorization
- 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 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.
Configurações relacionadas
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:
Para obter mais informações, confira o seguinte artigo ou livros:
PRB: Request.ServerVariables("LOGON_USER") retorna cadeia de caracteres vazia em ASP.NET
Reilly, Douglas J. Designing Microsoft ASP.NET Applications. Microsoft Press, 2001.
Esposito, Dino. Criando Soluções Web com ASP.NET e ADO.NET. Microsoft Press, 2001.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários