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.
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.
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.
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="*").
<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.
<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.
<anonymousIdentification enabled="true" />
Na configuração acima permitimos que usuários não autenticados acessem o site.
<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.
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.
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" />
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.'
<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).
<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.