www.devmedia.com.br
[versão para impressão]
Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4498

Para que serve o Web.Config?

Neste artigo vamos mostrar para que e como funciona o arquivo Web.Config.

Web.Config é um arquivo especial que configura o comportamento de sua aplicação ASP.NET e está no formato XML podendo ser editado facilmente com um editor comum, como o bloco de notas.

Cada aplicativo Web que você cria, pode ter o seu próprio arquivo Web.Config, e as informações deste arquivo valem para o diretório corrente e seus subdiretórios.

Visualizando

<?xml version="1.0" encoding="UTF-8" ?>
	<configuration>
 		<system.web>
 		</system.web>
	</configuration>

Configurações de segurança

Autenticação é o processo de identificação positiva dos clientes do aplicativo. Esses clientes podem incluir usuários, serviços, processos ou computadores. Os clientes autenticados são chamados elementos de segurança. A autenticação ocorre em todas as camadas de um aplicativo da Web distribuído. Inicialmente os usuários finais são autenticados pelo aplicativo da Web, em geral com um nome de usuário e uma senha. Eles realizam a autenticação para validar e processar a solicitação.

Autorização é o processo que controla a quais recursos e operações o cliente autenticado terá permissão de acesso. Esses recursos incluem arquivos, bancos de dados, tabelas, linhas etc., juntamente com os recursos no nível do sistema, como chaves do Registro e dados de configuração.

Hierarquia

img.GIF

Modos de autenticação do ASP.NET

Os modos de autenticação do ASP.NET são Windows, baseada em formulário, Passport e Nenhuma.

Autenticação do Windows. Nesse modo de autenticação, o ASP.NET depende do IIS para autenticar usuários e criar um símbolo de acesso do Windows visando representar a identidade autenticada. O IIS fornece os seguintes mecanismos de autenticação:

  • Autenticação básica. A autenticação básica requer que o usuário forneça credenciais na forma de nome de usuário e senha para provar sua identidade. As credenciais do usuário são transmitidas do navegador para o servidor Web em um formato codificado não criptografado Base64. Como o servidor Web obtém as credenciais não criptografadas do usuário, ele pode emitir chamada remota (por exemplo, para acessar computadores e recursos) usando as credenciais do usuário.
  • Autenticação resumida. A autenticação resumida, lançada com o IIS 5.0, é semelhante à autenticação básica, exceto que em vez de transmitir as credenciais do usuário não criptografadas do navegador para o servidor Web, ela transmite um hash das credenciais. Conseqüentemente, ela é mais segura, embora requeira o Internet Explorer 5.0 ou um cliente mais recente e configurações específicas do servidor.
  • Autenticação integrada do Windows. A autenticação integrada do Windows (Kerberos ou NTLM dependendo da configuração do cliente e do servidor) usa troca criptográfica com o Internet Explorer do usuário para confirmar a identidade deste. Somente o Internet Explorer tem suporte para ela (o Netscape Navigator não), assim, ela costuma ser usada apenas em cenários de Intranet, onde o software cliente pode ser controlado. Ela é usada apenas pelo servidor Web se o acesso anônimo estiver desativado ou for negado pelas permissões do sistema de arquivos do Windows.
  • Autenticação de certificado. A autenticação de certificado usa os certificados de cliente para identificar positivamente os usuários. O certificado de cliente é passado pelo navegador do usuário (ou aplicativo cliente) para o servidor Web. (No caso dos Web Services, o cliente passa o certificado por meio de uma propriedade ClientCertificates do objeto HttpWebRequest). Então, o servidor Web extrai a identidade do usuário do certificado. Essa abordagem depende de um certificado de cliente estar instalado no computador do usuário e, portanto, ela costuma ser mais usada em cenários de Intranet ou Extranet, onde a população de usuários é bem conhecida e controlada. O IIS, ao receber um certificado de cliente, pode mapeá-lo para uma conta do Windows.
  • Autenticação anônima. Caso você não necessite autenticar os clientes (ou implementar um esquema personalizado de autenticação), o IIS poderá ser configurado para a autenticação anônima. Nesse caso, o servidor Web cria um símbolo de acesso do Windows para representar todos os usuários anônimos com a mesma conta anônima (ou de convidado). A conta anônima padrão é a iusr_nomedamaquina, onde nomedamaquina é o nome NetBIOS do computador especificado durante a instalação.
  • Autenticação Passport. Nesse modo de autenticação, o ASP.NET usa os serviços de autenticação centralizados do Microsoft Passport. O ASP.NET fornece uma funcionalidade alternativa conveniente através do SDK (kit de desenvolvimento de software) do Microsoft Passport, que deve ser instalado no servidor Web.
  • Autenticação baseada em formulário. Esse método usa redirecionamento do cliente para encaminhar usuários não autenticados a um formulário HTML especificado que permite inserir as credenciais (geralmente o nome de usuário e senha). Essas credenciais são validadas e uma permissão de autenticação é gerada e retornada ao cliente. A permissão de autenticação mantém a identidade do usuário e, opcionalmente, uma lista de funções das quais ele é membro durante toda a sessão. A autenticação baseada em formulário algumas vezes é usada exclusivamente para a personalização do site. Nesse caso, é necessário gravar poucos códigos personalizados, pois o ASP.NET trata a maior parte do processo automaticamente com uma configuração simples. Nos cenários de personalização, o cookie precisa manter apenas o nome do usuário.

A autenticação baseada em formulário envia o nome do usuário e a senha ao servidor Web em texto sem formatação. Portanto, você deve usar a autenticação baseada em formulário em conjunto com um canal protegido por SSL. Para uma proteção contínua do cookie de autenticação transmitido nas solicitações subseqüentes, é necessário considerar o uso de SSL em todas as páginas do aplicativo e não apenas na página de logon.

Nenhuma. Nenhuma indica que você não quer autenticar usuários ou que está usando um protocolo de autenticação personalizado.

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
	<system.web>
		<authentication mode="Windows"/>
		<authorization>
			<allow users="server\administrado,server\user1,server\user2" />
			<deny users="*" />
		</authorization>
	</system.web>
</configuration>

Configurar IIS

  1. Desabilitar conta anônima.
  2. Habilitar Autenticação básica.
  3. Habilitar Autenticação integrada do Windows.

Criar usuários

  1. user1 - 123123
  2. user2 - 123123

Geral no web.config

Como todo arquivo XML,este possui marcas ou tag. A principal destas Tags é a <configuration>, que abrange dentro dela todas as demais configurações de sua máquina.

Dentro do elemento <configuration>, temos o elemento <system.web>, que contém informações de como a sua aplicação deve manipular os processos de um aplicativo ASP.NET. Algumas opções de <system.web> são: <compilation>, que instrui como a máquina deve compilar o seu programa.NET. Desta forma, a linha <compilation strict="true" explicit="true" /> instrui o compilador a gerar erros se encontrar alguma variável não declarada (explicit="true"), e a não fazer conversão automática de tipos de dados (strict="true"). São equivalentes as opções Option Explicit e Option Strict das aplicações VB/Access de versões anteriores. Há ainda a opção de gerar informações de depuração (em outras palavras, executar com debug), através da linha <compilation debug="true" />.

Note que você pode inserir vários atributos na mesma tag. Se você fosse configurar a sua aplicação com os dois últimos parâmetros apresentados, deveria ter a linha <compilation strict="true" explicit="true" debug="true" />.

Um outro elemento bastante utilizado é o <customErrors>, que instrui o que programa deve fazer em caso de erros. Para simplesmente redirecionar a aplicação no caso de ocorrer algum erro, basta acrescentar a seguinte linha: <customErrors defaultRedirect="PaginaDeErro.aspx" /> que irá redirecionar a execução da aplicação para a página PaginaDeErro.aspx. Note que esta página é uma página ASP.NET como qualquer outra, e através do uso de eventos e controles, você pode tratar este erro, gerar um log, enviar um email para o administrador, entre outras coisas. O exemplo acima transfere a execução para esta página no caso de qualquer erro, mas podemos parametrizar este elemento para gerar redirecionamentos para páginas específicas, de acordo com o tipo de erro, conforme o código a seguir:

<customErrors mode="RemoteOnly">
<error statusCode="403" redirect="AcessoRestrito.aspx" />

</customErrors>

Esta linha que acabamos de ver também mostra um outro atributo interessante do elemento <customErrors>, que é o RemoteOnly. Quando você configura este atributo para RemoteOnly, você faz com que os erros continuem surgindo em sua máquina local, mas que gerem redirecionamentos específicos para o usuário remoto. Muito útil para desenvolvimento. Por último. há ainda a opção customErrors="Off", que faz com que o ASP.NET apresente o erro para qualquer usuário, sem nenhum redirecionamento ou tratamento. <customErrors ="off"> esta opção é ideal quando estamos na etapa de desenvolvimento, pois não mascara o erro.

Importante: Não confunda este tratamento de erros com o tratamento Try...Catch...Finnaly, utilizado na codificação. O Try...Catch...Finnaly é utilizado para tratamento de erros de exceção do .NET Framework, enquanto o elemento customErrors é utilizado para manipular os erros HTTP do seu servidor web.

Um outro elemento que pode ser bastante útil é o <sessionState>. Com o sessionState, podemos configurar a aplicação Web para distribuir o controle de sessão para uma outra máquina ou serviço

<sessionState mode="StateServer" stateConnectionString="tcpip=www.OutraMaquina.com" />

<sessionState mode="StateServer" sqlConnectionString="tcpip=200.246.33.11:42333" />

O primeiro exemplo orienta a aplicação web a utilizar a máquina http://www.outramaquina.com/ para o armazenamento e gerenciamento das sessões. O segundo exemplo, orienta a aplicação para utilizar o SQL Server da máquina 200.246.33.11 (porta 42333) para gerenciar estas sessões. Estes exemplos evidentemente podem tornar a aplicação mais lenta, uma vez que utilizam uma nova comunicação para o gerenciamento do site, mas são excelentes quando você tem um volume excessivo de conexões simultâneas ou necessita de maior segurança de manutenção dos estados de sessão. Perde-se em velocidade, mas ganha-se em segurança.

Existem ainda os elementos de autenticação e autorização de um aplicativo web. Eles são respectivamente os elementos <authentication> e <authorization>. O authentication aceita quatro tipos diferentes de valores: none, Windows, Passport e Forms, como esse exemplo: <authentication mode="Windows" />.

Quando o atributo mode="none", nenhum tipo de autenticação é realizada. A autenticação Windows é ideal para intranets, pois utiliza do próprio sistema de segurança do Windows para identificar um usuário. É, contudo, pouco indicada para a internet, onde temos um número muito elevado de usuários. Para esses casos a autenticação baseada em formulários é a ideal, onde você pode especificar o form que se responsabilizará de identificar do usuário, como o exemplo a seguir:

<authentication mode="Forms">
<forms name="401kApp" loginUrl="/login.aspx" />
</authentication>

Por ultimo, a autenticação Passport é bem parecida com a autenticação baseada em forms, mas utiliza os servidores da Microsoft para essa finalidade.

A autenticação serve para identificar o usuário, já a autorização serve para informar o aplicativo se este possui direitos de acesso sobre o recurso solicitado. A autenticação possui dois elementos auxiliares, o <allow> e o <deny>, que como os próprios nomes indicam, servem para habilitar ou desabilitar um usuário (ou grupos de usuários) para um determinado recurso.

Um exemplo de autenticação seria:

<authorization>
<allow users="*" />
</authorization>

Este exemplo habilita todos os usuários a utilizarem a aplicação. Note que o caracter asterisco significa todos os usuários. Há ainda o caracter ponto de interrogação, que significa todos os usuários anônimos. O exemplo abaixo nega autorização a qualquer usuário anônimo.

<authorization>
<deny users="?" />
</authorization>

Você pode combinar mais de um elemento allow e deny dentro do elemento authorization. O .NET lê os elementos allow e deny de cima para baixo, de forma que se encontrar qualquer regra que impeça a utilização do recurso, ele retorna para a aplicação invalidando o acesso. Desta forma, o exemplo abaixo nega autorização a qualquer usuário não autenticado. Se ele já estiver autenticado, então a aplicação permite que ele utilize o recurso, seja lá quem ele for.

<authorization>
<deny users="?" />
<allow users="*" />
</authorization>

Existem ainda muitos atributos para os elementos authentication e authorization, pois o uso destes elementos é bastante flexível. Um último elemento que eu gostaria de citar é o elemento <appSettings>, também localizado abaixo do elemento configuration, que serve para armazenas valores não voláteis do seu aplicativo web. Em exemplo seria

<appSettings>
<add key="NomeDoAplicativo" value="Super Aplicativo de Gestão Empresarial" />
</appSettings>

Você pode ter vários elementos add dentro do seu elemento appSettings, de forma que eles funcionam como constantes globais do seu aplicativo. Para utilizar estes valores, você pode ter um código como a exemplificado a seguir:

Label1.Text = System.Configuration.ConfigurationSettings
.AppSettings("NomeDoAplicativo")

Esta funcionalidade é muito semelhante as funções GetSetting e SaveSetting do Visual Basic de versões anteriores. É um lugar excelente para você armazenar informações de conexão com um banco de dados, por exemplo.

<appSettings>
<add key="ConnectionString" 
value="Data Source=localhost; Initial Catalog=NorthWind" />
</appSettings>

Por último, gostaria de inserir um exemplo de arquivo web.config simples, apenas para você ter uma idéia geral de como ele se parece:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<appSettings>
<add key="ConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=C:\MySystem\Database.mdb;Persist Security Info=False" />
</appSettings>

<system.web>

<compilation debug="true" defaultLanguage="vb" explicit="true" batch="true" 
batchTimeout="15" maxBatchSize="1000" maxBatchGeneratedFileSize="3000" 
numRecompilesBeforeAppRestart="15" strict="false" />

<authentication mode="Forms">
<forms name=".ASPXAUTH" protection="All" timeout="60" 
loginUrl="default.aspx" path="/" />
</authentication>

<authorization>
<deny users="?" />
</authorization>

<httpRuntime useFullyQualifiedRedirectUrl="true" executionTimeout="90" 
maxRequestLength="4096" minFreeThreads="8" minLocalRequestFreeThreads="4" 
appRequestQueueLimit="100" />

<deviceFilters>
<filter name="isJScript" compare="javascript" argument="true" />
<filter name="isPocketIE" compare="browser" argument="Pocket IE" />
<filter name="isHTML32" compare="preferredRenderingType" argument="html32" />
</deviceFilters>

<customErrors mode="Off" />

</system.web>

</configuration>
Cleiton Jorge

Guru .net e tecnologias MS