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.
por Saad Ladki
Introdução
A autorização era difícil em versões anteriores do IIS. Como o IIS funcionava apenas com identidades do Windows, você tinha que ir para o sistema de arquivos e definir Listas de Controle de Acesso em arquivos e diretórios. Isso foi entediante porque a interface do usuário da ACL é complexa e as regras de autorização não copiam muito bem de computador para computador.
O IIS 7.0 e posterior usa a Autorização de URL. Ela permite que você coloque regras de autorização na URL real em vez do recurso do sistema de arquivos subjacente. Além disso, a configuração de Autorização de URL do IIS é armazenada em arquivos web.config. Você pode distribuir regras de autorização com o conteúdo do aplicativo. O passo a passo a seguir apresenta o recurso de Autorização de URL do IIS no Windows Server® 2008 Beta 3 e no Windows Vista Service Pack 1.
Pré-requisitos
Este passo a passo requer a instalação dos seguintes recursos do IIS acima sobre a instalação padrão:
- "ASP.NET" em "Serviços de Informações da Internet" – "World Wide Web Services" – "Recursos de desenvolvimento de aplicativos"
- "Autorização de URL" em "Serviços de Informações da Internet" –" World Wide Web Services" – "Segurança"
Cenário
Vamos simular um cenário em que você tem um diretório seguro que somente Alice, Bob e o grupo Administradores podem acessar. Dentro desse diretório, temos um arquivo chamado bobsSecret.aspx que somente Bob deve acessar.
Configuração do cenário
Para esse cenário, precisamos de três usuários: Alice, Bob e Fred. Também precisamos de um novo grupo chamado BobEAmigos no qual Alice e Bob são membros. Crie as três contas e o grupo por meio do Gerenciador de Usuários do Windows ou iniciando um prompt de comando com privilégios elevados e insira os comandos a seguir
net user Alice <password_of_your_choice> /add
net user Bob <password_of_your_choice> /add
net user Fred <password_of_your_choice> /add
net localgroup BobAndFriends /add
net localgroup BobAndFriends Alice /add
net localgroup BobAndFriends Bob /add
Abra o Explorer e vá para o diretório
%systemdrive%\inetpub\wwwroot
.Crie um diretório chamado "seguro".
Altere para o diretório "seguro" e crie um novo arquivo chamado "default.aspx". Você pode fazer isso com o bloco de notas ou qualquer outro editor de texto.
Cole o seguinte código na página default.aspx:
<%@Language="C#"%> <% string currentUser = Request.ServerVariables["LOGON_USER"]; if (currentUser == "") currentUser = "anonymous"; Response.Write("<b>Current User:</b> " + currentUser); %>
Crie outro arquivo chamado bobsSecret.aspx e cole o seguinte código nele:
<%@Language="C#"%> <% string currentUser = Request.ServerVariables["LOGON_USER"]; if (currentUser == "") currentUser = "anonymous"; Response.Write("<b>Current User:</b> " + currentUser); Response.Write(" <b>My secret:</b> I used Apache before I discovered IIS7.</b> "); %>
Agora veja se as duas páginas da Web funcionam solicitando
http://localhost/secure/
ehttp://localhost/secure/bobsSecret.aspx
.
Configurando a Autenticação
A autenticação responde à pergunta "quem" deseja ter acesso. A autorização responde "se" o "quem" autenticado realmente obtém acesso. Portanto, antes de experimentar a autorização de URL, devemos habilitar a autenticação porque, sem saber "quem" deseja ter acesso, não podemos responder ao "se".
Inicie INETMGR digitando INETMGR no menu "Iniciar Pesquisa".
Abra o nó do computador no modo de exibição da árvore esquerda, abra o nó "Site Padrão" e selecione o diretório "seguro".
Clique duas vezes em "Autenticação".
Desabilite a "Autenticação Anônima" e habilite "Autenticação Básica".
Agora solicite
http://localhost/secure
ehttp://localhost/secure/bobsSecret.aspx
novamente. Você receberá uma solicitação de credenciais. Insira "Alice" como nome de usuário e sua senha. Você será autenticado como "Alice".Observação
Se você usar o Internet Explorer, poderá acessar Ctrl+F5 para que o Internet Explorer atualize a versão armazenada em cache da página ASP.NET.
Configurando a autorização de URL
Agora proteja as duas páginas para que apenas Alice e Bob tenham acesso:
Clique duas vezes no diretório Web "seguro" novamente e selecione "Regras de Autorização".
Remova a regra "Permitir todos os usuários".
Clique em "Adicionar Regra de Permissão" e selecione o botão de opção "Funções especificadas ou grupos de usuários:" e adicione "BobEAmigos" e clique no botão "OK".
Feche todas as janelas do Internet Explorer porque ele armazena em cache as credenciais inseridas na etapa anterior.
Abra o Internet Explorer e tente acessar a página usando as credenciais de Fred. Você não obtém acesso.
Agora tente as credenciais do Bob ou as credenciais de Alice. Você obtém acesso.
Configurando a Autorização de URL para uma única página da Web
Agora ainda temos o problema de Alice ainda poder acessar BobsSecret.aspx. Veja como corrigi-lo:
Clique duas vezes no diretório Web "Seguro" novamente e selecione "Exibição de Conteúdo" na parte inferior da página.
Você verá uma lista de arquivos na pasta segura, ou seja, "default.aspx" e "bobsSecret.aspx".
Clique com o botão direito do mouse em bobsSecret.aspx e selecione "Modo de Exibição de Recursos"
Agora você está fazendo apenas alterações para a página bobsSecret.aspx, conforme indicado na barra de status.
Selecione "Regras de Autorização" novamente. Você vê as configurações herdadas, ou seja, o grupo BobsEAmigos tem permissão para acessar bobsSecret.aspx.
Remova a regra "BobsEAmigos".
Agora clique em "Adicionar Regra de Permissão..."
Clique no botão de opção "Usuários especificados:", insira "Bob" e clique em "OK".
Feche todas as janelas e do Internet Explorer e solicite
http://localhost/secure/bobsSecret.aspx
.Somente inserindo as credenciais de Bob você terá acesso.
Tópicos avançados de autorização de URL
Os parágrafos a seguir mostram alguns tópicos avançados de Autorização de URL.
Configuração
Você não precisa usar a Interface do Usuário para especificar as configurações de Autorização de URL. Você pode especificar regras de autorização de URL diretamente no arquivo web.config. A seção de configuração de <autorização> do IIS é delegada por padrão. Você pode distribuir regras de autorização junto com o conteúdo da Web. Abaixo, veja a aparência do arquivo %systemdrive%\inetpub\wwwroot\secure\web.config
após esse passo a passo:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="BobAndFriends" />
</authorization>
</security>
</system.webServer>
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="BobAndFriends" verbs="" />
<add accessType="Allow" users="Bob" />
</authorization>
</security>
</system.webServer>
</location>
</configuration>
Diferenças entre a autorização de URL do ASP.NET e autorização de URL do IIS
Há pequenas, mas importantes diferenças entre UrlAuthorization do ASP.NET e a Autorização de URL do IIS. Ambos os módulos podem ser instalados por meio da Instalação do IIS. A Autorização de URL do IIS é instalada quando você instala o recurso "Autorização de URL" na Interface do Usuário de Instalação do IIS:
A Autorização de URL do ASP.NET é instalada quando você instala ASP.NET sobre o IIS. Se você for um especialista em ASP.NET, lembre-se de que UrlAuthorization do ASP.NET é implementado no módulo System.Web.Security.UrlAuthorizationModule. A seção de configuração correspondente é system.web/authorization. Aqui está a entrada de configuração.
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
O módulo de Autorização de URL do IIS é implementado no módulo global urlauthz.dll.
<add name="UrlAuthorizationModule" image="%windir%\System32\inetsrv\urlauthz.dll" />
É importante ter em mente que a pré-condição managedHandler está no módulo ASP.NET UrlAuthorization. A pré-condição informa que o módulo de autorização de URL é invocado somente quando o código que manipula a solicitação é mapeado para o código gerenciado, normalmente uma página .aspx ou .asmx. A Autorização de URL do IIS, por outro lado, aplica-se a todo o conteúdo. Você pode remover a pré-condição managedHandler do módulo de Autorização de URL do ASP.NET. Ele está lá para evitar uma penalidade de desempenho que você precisa pagar quando cada solicitação (como uma solicitação para .html ou .jpg páginas) teria que passar pelo código gerenciado.
Avaliação de regras
Também há diferenças na ordem em que o IIS e os dois módulos de autorização de URL avaliam as regras de autorização. A Autorização de URL do ASP.NET é focada no desenvolvedor e os desenvolvedores têm controle total sobre quais regras eles definem. A Autorização de URL do IIS mantém o Administrador em mente e tenta garantir que os desenvolvedores não possam substituir as regras que um Administrador define.
Um exemplo
Suponha que o administrador queira garantir que todos os usuários de um determinado site sejam autenticados. Para fazer isso, defina a seguinte configuração na raiz do site:
<authorization lockElements="clear">
<add accessType="Deny" users="?" />
</authorization>
Essa configuração nega acesso a usuários anônimos (? = usuários anônimos, * = todos os usuários). Com lockElements="clear", você garante que ninguém em um nível inferior possa limpar a herança dessa configuração. Sua configuração seria herdada para todos os aplicativos e diretórios virtuais deste site. Trata-se de uma violação de bloqueio quando você tenta usar a instrução <clear/> em um nível inferior.
Para obter mais informações sobre o bloqueio de configuração, consulte Como bloquear o conjunto de configuração do ASP.NET.
Você também pode bloquear o elemento clear em UrlAuthorization do ASP.NET. O problema é que a Autorização de URL do ASP.NET avalia as regras de autorização de baixo para cima, ou seja, primeiro avalia as regras no arquivo web.config atual antes de avaliar as regras pai. Assim que uma correspondência for encontrada, o acesso será concedido ou negado. No exemplo acima, você ainda pode conceder acesso a usuários anônimos especificando <adicionar usuários="?" /> como uma regra de autorização no arquivo web.config seguro. Como ele é avaliado primeiro, os usuários anônimos teriam acesso.
O módulo de Autorização de URL do IIS avalia as regras de negação primeiro. Como você nega o acesso a usuários anônimos, não é possível simplesmente substituir essa regra. A outra grande diferença é que as regras pai são avaliadas primeiro. Isso significa que se você negar o acesso para Fred em um nível mais alto, você não poderá permitir o acesso a Fred em um nível inferior.
Tabela de diferenças
Diferença | Comportamento da Autorização de URL do ASP.NET | Comportamento da Autorização de URL do IIS |
---|---|---|
Avaliação de regra | Ordem: a) Nível inferior primeiro indo até o pai b) Ordem de aparência na coleção de regras | Ordem: a) As regras de negação são avaliadas primeiro a partir do pai b) Permitir regras começando no pai. c) Ordem de aparência na coleção de regras |
Interface do Usuário do IIS | Nenhuma interface do usuário do IIS | Interface do usuário "Regras de Autorização" |
Seção de configuração | system.web/authorization | system.webServer/security/authorization |
Módulo | System.Web.Security.UrlAuthorization | %windir%\system32\inetsrv\urlauthz.dll |
Sumário | Aplica-se somente ao conteúdo mapeado para um manipulador gerenciado (pode ser desativado por meio da pré-condição managedHandler) | Aplica-se a todo o conteúdo |
Usando contas e grupos de domínio
Você deve especificar contas de domínio e grupos usando o seguinte:
<domainname or username>\<user>
Este exemplo usa o nome do computador, supondo que nossas contas foram criadas no iis7test do computador:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="iis7test\BobAndFriends" />
</authorization>
</security>
</system.webServer>
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="iis7test\BobAndFriends" verbs="" />
<add accessType="Allow" users="iis7test\Bob" />
</authorization>
</security>
</system.webServer>
</location>
</configuration>
Usando identidades que não são do Windows
A Autorização de URL não é apenas para identidades do Windows. Também funciona bem para identidades que não são do Windows. Use-a junto com Associação e Funções do ASP.NET e para identidades personalizadas, caso você escreva seu próprio módulo de autenticação.
Resumo
A Autorização de URL é uma nova maneira avançada de especificar regras de autorização para aplicativos Web. Agora você pode especificar regras em XML sem usar as Listas de Controle de Acesso do Windows por mais tempo.