O Authorization Manager (ou AzMan) é uma implementação de uma architectura baseado em perfis (RBAC – Role Based Access Control). Com o Azman, podemos definir um conjunto de perfis para uma aplicação, definir os utilizadores que herdam cada perfil, e depois na aplicação gerir os acessos a operações (e não apenas à aplicação em si) pelos perfis.
Os utilizadores que associamos pode vir de variadíssimas fontes como um ficheiro XML, uma AD ou ainda num ADAM. O caso da AD é óptimo para implementar métodos de single sign-on, especialmente em aplicações que correm numa intranet, permitindo conceder autorização a operações em aplicações por utilizadores já autenticados no domínio. E integra-se com relativa facilidade no DotNet, utilizando as classes de Membership e Roles existentes.
O AzMan é parte integral do Windows 2003, mas é possível utiliza-lo no 2000 ou XP. Aliás surgiu uma aplicação em que tive de o implementar numa web app a correr num “servidor” baseado numa máquina com o XP. Infelizmente a instalação no XP não é imediato. É necessário introduzir dois elementos, principalmente – o Snap-in de administração (para ter um UI de administração dos acessos e criar o armazem de associações) e as classes próprias para o .NET.
O processo:
- Instale o Windows Server 2003 Administration Tools Pack. Este passo instala uma serie de ferramnetas e snap-ins típicos do Server 2003, incluindo o AzMan que nos interessa.
- A instalação inclui o snap-in (azman.msc) mas não inclui a dll (primary interop assembly). Para isso deve instalar o Windows 2000 Authorization Manager Runtime. Depois de extrair, é necessário registar o Microsoft.Interop.Security.AzRoles.dll no GAC do .NET. Abre a ferramenta de configuração do .NET (Painel de controlo -> Ferramentas administrativas -> Microsoft .Net 2.0 Configuration Tool; Caso não esteja disponivel pode ser necessário instalar o SDK). Na ferramenta de configuração, segue para o Assemblies Cache e adiciona a dll presente em Windows(R) 2000 Authorization Manager Runtime\PIA\1.2.
Deste modo, o servidor da aplicação, em XP, fica preparado para utilizar o AzMan (Felizmente no server 2003 é bem mais facil…). Resta agora criar as políticas e configurar a aplicação. Para configurar as políticas:
- Excute o azman.msc, para abrir o snap-in e criar as políticas e crie uma nova authorization store. Eu, por exemplo, e para o que necessitava, armazenei as poíticas num ficheiro XML, numa pasta não acessivel por web. A criação das politicas deve ser efectuado em modo developer (Action -> Options -> Developer Mode).
- Crie uma nova aplicação.
- Em Definitions -> Role Definitions adiciona os nomes dos perfis que necessitas. No meu caso, só queria incluir uma forma simplificada de autenticação e portanto apenas criei um grupo chamado AppUsers. O AzMan permite incluir também operações se necessitares.
- Em Role Assignments adiciona o(s) perfil(s) adicionado(s) e a cada perfil adiciona os utilizadores (da máquina e/ou AD) ao perfil. O Windows, durante o processo de autenticação ira atribuir o perfil ao utilizador.
- Atribui permissões ao utilizador ASPNET (ou equivalente) para aceder ao ficheiro XML criado, no caso de estar a usar um ficheiro XML.
Para configurar a aplicação para utilizar o AzMan,
- Adiciona a connection string, no caso de usar o ficheiro XML, à lista de connection strings: <configuration>
<connectionstrings>
<add name=“LocalPolicyStore”>
connectionString=“msxml://c:/Aplicação/azman.xml” />;
</add>
</connectionstrings>
</configuration>
- Define no <system.web> o RoleProvider: <system.web>
<roleManager
enabled=“true”
cacheRolesInCookie=“true”
defaultProvider=“RoleManagerAzManProvider”
cookieName=".ASPXROLES"
cookiePath="/"
cookieTimeout=“30”
cookieRequireSSL=“true”
cookieSlidingExpiration=“true”
createPersistentCookie=“false”
cookieProtection=“All”>
<providers>
<add name=“RoleManagerAzManProvider”
type=“System.Web.Security.AuthorizationStoreRoleProvider, System.Web, Version=2.0.0.0,
Culture=neutral, publicKeyToken=b03f5f7f11d50a3a”
connectionStringName=“LocalPolicyStore”
applicationName=“Nome da Aplicação”/>
</providers>
</roleManager>
</system.web>
onde _applicationName_ é o nome da aplicação atribuída no AzMan </li>
* A partir daí posso defenir no web.config as regras de autoriação para uma pasta, com base no perfil:
<pre lang="xml"><authorization>
<allow roles=“AppUsers” />
<deny users="*" />
</authorization>
ou utilizar a API do Azman para definir e testar autorizações (até ao nível da operação). </li> </ol>
Mais informação em <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms998336.aspx">http://msdn.microsoft.com/en-us/library/ms998336.aspx</a>