Autorização no Reporting Services
Autorização é o processo de determinar se uma identidade deve receber o tipo de acesso solicitado a um determinado recurso no banco de dados de servidor de relatório. O Reporting Services usa uma arquitetura de autorização baseada em função que concede um acesso de usuário a um determinado recurso com base na atribuição de função do usuário para o aplicativo. As extensões de segurança do Reporting Services contêm uma implementação de um componente de autorização que é usado para conceder acesso aos usuários depois que eles são autenticados no servidor de relatório. A autorização é invocada quando um usuário tenta executar uma operação no sistema ou um item de servidor de relatório por meio da API SOAP e via acesso à URL. Esse cenário é possível por meio da interface de extensão de segurança IAuthorizationExtension2. Como foi dito anteriormente, todas as extensões herdam de IExtension , a interface base para qualquer extensão que você implanta. IExtension e IAuthorizationExtension2 são membros do namespace Microsoft.ReportingServices.Interfaces.
Verificar acesso
Em autorização, a chave para qualquer implementação de segurança personalizada é a verificação de acesso, que é implementada no método CheckAccess. CheckAccess é chamado a cada vez que um usuário tenta uma operação no servidor de relatório. O método CheckAccess é sobrecarregado para cada tipo de operação. Para operações de pasta, um exemplo de uma verificação de acesso pode se parecer com o exemplo a seguir:
// Overload for Folder operations
public bool CheckAccess(
string userName,
IntPtr userToken,
byte[] secDesc,
FolderOperation requiredOperation)
{
// If the user is the administrator, allow unrestricted access.
if (userName == m_adminUserName)
return true;
AceCollection acl = DeserializeAcl(secDesc);
foreach(AceStruct ace in acl)
{
if (userName == ace.PrincipalName)
{
foreach(FolderOperation aclOperation in
ace.FolderOperations)
{
if (aclOperation == requiredOperation)
return true;
}
}
}
return false;
}
O servidor de relatório chama o método CheckAccess passando o nome do usuário conectado, um token de usuário, o descritor de segurança para o item e a operação solicitada. Aqui você poderia verificar o descritor de segurança para o nome de usuário e a permissão apropriada para concluir a solicitação, retornar true para mostrar que o acesso foi concedido ou false para mostrar que o acesso foi negado.
Descritores de segurança
Ao definir políticas de autorização em itens do banco de dados do servidor de relatório, um aplicativo cliente (como o Gerenciador de Relatórios) envia as informações do usuário na extensão de segurança junto com a política de segurança do item. Essa política de segurança e as informações do usuário são conhecidas coletivamente como um descritor de segurança. Um descritor de segurança contém as seguintes informações para um item no banco de dados do servidor de relatório:
O grupo ou o usuário com algum tipo de permissão para executar operações no item.
O tipo do item.
Uma lista de controle de acesso discricionário que controla acesso ao item.
Os descritores de segurança são criados por meio do serviço Web SetPolicies e dos métodos SetSystemPolicies.
Fluxo de autorização
A autorização do Reporting Services é controlada pela extensão de segurança configurada para ser executada atualmente no servidor. A autorização é baseada em função e está limitada às permissões e operações fornecidas pela arquitetura de segurança do Reporting Services. O diagrama a seguir descreve o processo de autorização de usuários a operar em itens no banco de dados do servidor de relatório:
Como mostrado neste diagrama, a autorização segue esta sequência:
Uma vez autenticados, os aplicativos cliente fazem solicitações ao servidor de relatório por meio dos métodos do serviço Web Servidor de Relatório. Um tíquete de autenticação é passado ao servidor de relatório na forma de um cookie no cabeçalho HTTP de cada solicitação Web.
O cookie é validado antes de qualquer verificação de acesso.
Após a validação do cookie, o servidor de relatório chama GetUserInfo e o usuário recebe uma identidade.
O usuário tenta executar uma operação por meio do serviço Web Reporting Services.
O servidor de relatório chama o método CheckAccess.
O descritor de segurança é recuperado e passado a uma implementação de extensão de segurança personalizada de CheckAccess. Neste ponto, o usuário, grupo ou computador é comparado ao descritor de segurança do item acessado e é autorizado a executar a operação solicitada.
Se o usuário for autorizado, o serviço Web executará a operação e devolverá uma resposta ao aplicativo de chamada.