ASP NET - web.Config

Termos técnicos

Novamente a Microsoft utiliza termos em inglês que demoramos para descobrir exatamente para que servem. Abaixo descrevo os mais importantes.

Role : É uma regra criada que podemos definir na lógica ou segurança do site que define algo a respeito de alguma coisa. Por exemplo podemos criar uma regra chamada 'admin' e colocar um conjunto de usuários dentro dela e no site realizar a lógica para que esses usuários sejam os administradores do site e habilitar o acesso dos mesmos as funções administrativas do site. Veja roles abaixo


Abaixo cito os principais parâmetros do web.config de uma aplicação.
No campo : 'Dentro de' defino dentro de qual campo a configuração deve ser inserida a menos que a configuração seja complexa ai eu coloco todos os campos na integra.

Note que se estamos alterando o web.config do root do site estaremos alterando todo o site e se alterarmos o web.config de uma app dentro do site (numa sub-pasta) estaremos definindo a segurança apenas da sub-pasta a qual o web.config foi depositado.

Exibição de Erros

Dentro de : <system.web>

<customErrors mode="On"/>

Liga a exibição de erros amigável default do IIS (default). É uma boa configuração num servidor da Internet.


<customErrors mode="Off"/>

Desliga a exibição de erros amigável default do IIS. É uma boa configuração para um servidor de desenvolvimento ou de testes.


Depuração de Erros

Por default a depuração de erros já vem ligada quando criamos uma aplicação web nova.
O default para o servidor IIS é a depuração de erros desligada e se um erro ocorrer ele informa para adicionar esta tag se quiser ver detalhes do erro.
Para ativar a depuração de erros logo após a tag acima adicione :
<compilation debug="true" />

Com isto duas informações fundamentais serão exibidas : A linha com erro e o erro ocorrido.

Authorization - Autorização de acesso ao site

Dentro de : <system.web>

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

Sendo que :
allow habilita e deny desabilita o acesso.
* representa todos os usuarios do site.
? representa os usuários autenticados do site.
Sendo assim na configuração acima definimos que todos os usuários (*) tem acesso (allow) ao site.

A autorização ( Authorization ) define quem pode acessar o site ou as páginas dele.


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

No codigo acima - <deny users="?"/> desabilitamos o acesso de usuários não autenticados.
Cuidado para não colocar 'deny users = "*"' porque ninguém vai ter acesso ao site.

<authorization>
    <allow users="Joao,Jose"/>
    <deny users="*"/>
</authorization>

Na configuração acima definimos que os usuário Joao e Jose tem acesso ao site (allow) e todos os usuários não autenticados (*) não tem acesso ao site.


<configuration>
    <location path="PastaPrivada">
        <system.web>
            <authorization>
                <allow roles="membros" />
                <deny users="*" />
            </authorization>
        </system.web>
    </location>
<configuration>

Na configuração acima definos a autorização de acesso a pasta chamada 'PastaPrivada'.
Definimos que os usuário pertencentes a role 'membros' tem acesso a pasta (allow) e que os usuários não identificados não tem acesso a pasta (deny users="*").

Authentication - Autenticação - Identificação dos usuários do site

<configuration>
    <system.web>
        <authentication mode="Windows" />
        <authorization>
            <deny users="?" />
        </authorization>
    </system.web>
</configuration>

No código acima definimos a autenticação tipo 'Passport', ou seja, feita pelo windows ou Active Directory.


<authentication mode="Forms" protection="Validation" >
    <forms loginURL="Login.aspx" />
</authentication>

No código acima definimos o método de autenticação forms e o processo de autenticação é o Validation que no asp net significa criptografia via Triple Data Encryption Standard (3DES).


<authentication mode="Forms" >
    <forms Cookieless="UseUri" loginURL="Login.aspx" />
</authentication>

No processo acima definimos que usamos a autenticação forms e que ela não usa cookies.


<forms loginUrl=”MeuLogin.aspx” timeout=”10”>

No processo acima definimos a página de login (MeuLogin.aspx) e o tempo de validação do login para 10 minutos. Portanto se o usuario ficar mais quem 10 minutos sem acessar o site vai ter que fazer o login novamente.


<authentication mode="Forms">
    <forms loginUrl="login.aspx" protection="Encryption" timeout="30" >
        <credentials passwordFormat="SHA1" >
            <user name="joao" password="0999E009888B9C8D9E876123DC26374876ACA4B"/>
            <user name="jose" password="A15F876B76890988C876687E8778F8888A766B88"/>
        </credentials>
    </forms>
</authentication>

No modelo acima definimos o modo de autenticação como forms e definimos as senhas do joao e jose e o método de criptografia utilizado (SHA). Note que a senha é tratada como texto (hexadecimal de 0 a 9 e de A a F).


<authentication mode="Passport"">
<authorization>
    <deny users="?" />
</authorization>

No modelo acima definimos o modo de autenticação como passport e negamos acesso aos usuários não autenticados as páginas do site.

Authentication e Authorization Juntos

<location path="ListarUsuarios.aspx">
    <system.web>
        <authentication mode="forms">
            <forms loginUrl="AdminLogin.aspx" protection="All"/>
        </authentication>
        <authorization>
            <allow users="admin"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Nesta configuração estamos definindo a segurança apenas da página ListarUsuarios.aspx.
Definimos que a autenticação é por formulário ( forms ) e o formulário de autenticação é a página AdminLogin.aspx.
Definimos também que os usuários admin tem acesso a pasta da página ( allow users="admin") e
Proibimos o acesso a pasta aos usuários não identificados (deny users="*")


<authentication mode="forms">
    <forms loginUrl="Login.aspx"/>
        <credentials passwordFormat = "Clear">
            <user name="ze" password="naosei"/>
            <user name="chico" password="reidoterreiro"/>
            <user name="bento" password="fuminhodanado"/>
        </credentials>
    </forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>

Na configuração acima definimos a autenticação como sendo forms, que a página de login é a Login.aspx, que temos 3 usuários com as respectivas senhas, e negamos o acesso aos recursos da pasta aos usuários não autenticados (<deny users="?"/>). A única coisa que não tá legal nessa configuração é que a senha é passada sem criptografia que significa que só deverá ser usada numa intranet ou num site corporativo interno a empresa.


Habilitando Autenticação anônima

<anonymousIdentification enabled="true" />

Na configuração acima permitimos que usuários não autenticados acessem o site.


User Profile

<profile>
   <properties>
      <add name="Nome" allowAnonymous="true" />
      <add name="Telefone" allowAnonymous="true" />
      <add name="Email" allowAnonymous="true" />
      <add name="UltVisita" type="System.DateTime" allowAnonymous="true" />
   </properties>
</profile>

Profile é um conjunto de informações sobre um objeto do site. No caso, o usuário (user Profile).
Definimos o nome, telefone, email e a última visita do usuário ao site.


Definindo o método de autenticação como Forms

Dentro de : <system.web>

<authentication mode="Forms" />

Neste caso definimos apenas que a autenticação é via forms, ou seja, será feita por uma página de login mas não definimos qual página, o que é raro.


<authentication mode="Forms">
    <forms loginUrl="Login.aspx" />
</authentication>

Neste caso definimos que a autenticação é via forms, ou seja, será feita por uma página de login e esta página de login é a 'Login.aspx'. É o mais comum.


Dados do usuário - User Profile

Dentro de : <system.web>

<profile>
    <properties>
        <add name="Nome" />
        <add name="Telefone" />
        <add name="Email"/>
        <add name="UltVisita" type="System.DateTime" />
    </properties>
</profile>

Profile é o conjunto de informações sobre um objeto do sistema. No caso, um usuário.
No exemplo acima a profile pertence a um usuário e define os campos de informação de nos interessam desse usuário. Pode ser salvo num cookie ou na session do servidor.

Definindo um campo inteiro : <add name="CEP" type="System.Int16" allowAnonymous="true" />


Habilitando o gerenciamento de grupo de usuários ou uma role

Dentro de : <system.web>

<roleManager enabled="true" />

No exemplo acima apenas habilitamos o gerenciamento de grupos(roles) mas não definimos nada sobre elas.


<roleManager enabled="true" cacheRolesInCookie="true" ></roleManager>

No exemplo acima habilitamos o roleManager e que os dados serão armazenados em cookies.


<allow roles="admin" />

No exemplo acima habilitamos a role 'admin' apenas

As regras ou roles podem ser criadas pelo gerenciador do IIS, selecionando 'Default web site', selecionando 'Regras de Autorização do .NET', clicando com o botão direito do mouse e selecionando 'Abrir Recurso' e finalmente clicando em 'Adicionar regra de Permissão.'


AutoConfig

<processModel autoConfig="true" />

Esta é a configuração padrão para o autoconfig.
Por padrão, os aplicativos ASP.NET fazem todas as solicitações de recursos do sistema do ASPNET (IIS 5.0) ou a conta do serviço de rede (IIS 6.0 e posterior). Esta configuração é definida no item <processModel> da seção <system.web> do arquivo Machine.config.

Note que definindo o autoConfig como true faz com que o ASP.NET automaticamente gerencie a impersonalização (impersonate - veja abaixo).


Impersonate

<identity impersonate="true" />

Impersonate é quando um usuário utiliza as credenciais de outro usuário para realizar uma tarefa.

A configuração acima habilita a impersonalização da conta do Windows autenticada do cliente ou da conta IIS_IUSR no MachineName para acesso anônimo. Adicione-a no <system.web>.
Esta configuração é feita definindo o atributo impersonate do elemento <identity> do Machine.config (para configurações de todo o servidor) ou arquivos Web.config (para configurações específicas de aplicativo ou diretório).


<identity impersonate="true" userName="DOMAIN\UserName" password="Password"/>

No recurso acima definimos que usaremos a 'impersonalização' e também um usuário específico para impersonalização ou seja, não mudamos de um usuário para anônimo mas sim de um usuário para outro usuário.