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:

Screenshot of the Reporting Services security authorization flow.

Como mostrado neste diagrama, a autorização segue esta sequência:

  1. 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.

  2. O cookie é validado antes de qualquer verificação de acesso.

  3. Após a validação do cookie, o servidor de relatório chama GetUserInfo e o usuário recebe uma identidade.

  4. O usuário tenta executar uma operação por meio do serviço Web Reporting Services.

  5. O servidor de relatório chama o método CheckAccess.

  6. 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.

  7. Se o usuário for autorizado, o serviço Web executará a operação e devolverá uma resposta ao aplicativo de chamada.