Compartilhar via


Autenticação nos Serviços de Relatórios

A autenticação é o processo de estabelecer o direito de um usuário a uma identidade. Há muitas técnicas que você pode usar para autenticar um usuário. A maneira mais comum é usar senhas. Ao implementar a Autenticação de Formulários, por exemplo, você deseja uma implementação que consulta os usuários por credenciais (geralmente por alguma interface que solicita um nome de logon e senha) e valida os usuários em um armazenamento de dados, como uma tabela de banco de dados ou um arquivo de configuração. Se as credenciais não puderem ser validadas, o processo de autenticação falhará e o usuário assumirá uma identidade anônima.

Autenticação personalizada no Reporting Services

No Reporting Services, o sistema operacional Windows manipula a autenticação dos usuários por meio da segurança integrada ou por meio da recepção explícita e validação das credenciais do usuário. A autenticação personalizada pode ser desenvolvida no Reporting Services para dar suporte a esquemas de autenticação adicionais. Isso é possível por meio da interface IAuthenticationExtensionde extensão de segurança. Todas as extensões herdam da IExtension interface base para qualquer extensão implantada e usada pelo servidor de relatório. IExtension, bem como IAuthenticationExtension, são membros do Microsoft.ReportingServices.Interfaces namespace.

A principal maneira de se autenticar em um servidor de relatório no Reporting Services é o LogonUser método. Esse membro do serviço Web do Reporting Services pode ser usado para passar credenciais de usuário para um servidor de relatório para validação. Sua extensão de segurança subjacente implementa IAuthenticationExtension.LogonUser que contém seu código de autenticação personalizado. No exemplo de Autenticação de Formulários, LogonUser, que executa uma verificação de autenticação em relação às credenciais fornecidas e a um repositório de usuário personalizado em um banco de dados. Um exemplo de uma implementação do LogonUser tem esta aparência:

public bool LogonUser(string userName, string password, string authority)  
{  
   return AuthenticationUtilities.VerifyPassword(userName, password);  
}  
  

A função de exemplo a seguir é usada para verificar as credenciais fornecidas:

  
internal static bool VerifyPassword(string suppliedUserName,  
   string suppliedPassword)  
{   
   bool passwordMatch = false;  
   // Get the salt and pwd from the database based on the user name.  
   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:  
   // Use DPAPI (User Store) from Enterprise Services," and "How To:  
   // Create a DPAPI Library" for more information about how to use  
   // DPAPI to securely store connection strings.  
   SqlConnection conn = new SqlConnection(  
      "Server=localhost;" +   
      "Integrated Security=SSPI;" +  
      "database=UserAccounts");  
   SqlCommand cmd = new SqlCommand("LookupUser", conn);  
   cmd.CommandType = CommandType.StoredProcedure;  
  
   SqlParameter sqlParam = cmd.Parameters.Add("@userName",  
       SqlDbType.VarChar,  
       255);  
   sqlParam.Value = suppliedUserName;  
   try  
   {  
      conn.Open();  
      SqlDataReader reader = cmd.ExecuteReader();  
      reader.Read(); // Advance to the one and only row  
      // Return output parameters from returned data stream  
      string dbPasswordHash = reader.GetString(0);  
      string salt = reader.GetString(1);  
      reader.Close();  
      // Now take the salt and the password entered by the user  
      // and concatenate them together.  
      string passwordAndSalt = String.Concat(suppliedPassword, salt);  
      // Now hash them  
      string hashedPasswordAndSalt =  
         FormsAuthentication.HashPasswordForStoringInConfigFile(  
         passwordAndSalt,  
         "SHA1");  
      // Now verify them. Returns true if they are equal.  
      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);  
   }  
   catch (Exception ex)  
   {  
       throw new Exception("Exception verifying password. " +  
          ex.Message);  
   }  
   finally  
   {  
       conn.Close();  
   }  
   return passwordMatch;  
}  

Fluxo de autenticação

O serviço Web do Reporting Services fornece extensões de autenticação personalizadas para habilitar a Autenticação de Formulários pelo Gerenciador de Relatórios e pelo servidor de relatório.

O LogonUser método do serviço Web do Reporting Services é usado para enviar credenciais ao servidor de relatório para autenticação. O serviço Web usa cabeçalhos HTTP para passar um tíquete de autenticação (conhecido como "cookie") do servidor para o cliente para solicitações de logon validadas.

A ilustração a seguir ilustra o método de autenticação de usuários no serviço Web quando seu aplicativo é implantado com um servidor de relatório configurado para usar uma extensão de autenticação personalizada.

autenticação de segurança do Reporting ServicesFluxo de

Conforme mostrado na Figura 2, o processo de autenticação é o seguinte:

  1. Um aplicativo cliente chama o método de serviço LogonUser Web para autenticar um usuário.

  2. O serviço Web faz uma chamada para o LogonUser método de sua extensão de segurança, especificamente, a classe que implementa IAuthenticationExtension.

  3. Sua implementação valida o nome de usuário e a senha no repositório de usuários ou na autoridade de LogonUser segurança.

  4. Após a autenticação bem-sucedida, o serviço Web cria um cookie e o gerencia para a sessão.

  5. O serviço Web retorna o tíquete de autenticação para o aplicativo de chamada no cabeçalho HTTP.

Quando o serviço Web autentica um usuário com êxito por meio da extensão de segurança, ele gera um cookie que é usado para solicitações subsequentes. O cookie pode não persistir dentro da autoridade de segurança personalizada porque o servidor de relatório não possui a autoridade de segurança. O cookie é retornado do método de LogonUser serviço Web e é usado em chamadas de método de serviço Web subsequentes e no acesso à URL.

Observação

Para evitar comprometer o cookie durante a transmissão, os cookies de LogonUser autenticação retornados devem ser transmitidos com segurança usando a criptografia SSL (Secure Sockets Layer).

Se você acessar o servidor de relatório por meio do acesso à URL quando uma extensão de segurança personalizada estiver instalada, os Serviços de Informações da Internet (IIS) e ASP.NET gerenciarão automaticamente a transmissão do tíquete de autenticação. Se você estiver acessando o servidor de relatório por meio da API SOAP, sua implementação da classe proxy deverá incluir suporte adicional para gerenciar o tíquete de autenticação. Para obter mais informações sobre como usar a API SOAP e gerenciar o tíquete de autenticação, consulte "Usando o serviço Web com segurança personalizada".

Autenticação de Formulários

A Autenticação de Formulários é um tipo de autenticação ASP.NET na qual um usuário não autenticado é direcionado para um formulário HTML. Depois que o usuário fornece credenciais, o sistema emite um cookie contendo um tíquete de autenticação. Em solicitações posteriores, o sistema primeiro verifica o cookie para ver se o usuário já foi autenticado pelo servidor de relatório.

O Reporting Services pode ser estendido para dar suporte à Autenticação de Formulários usando as interfaces de extensibilidade de segurança disponíveis por meio da API do Reporting Services. Se você estender o Reporting Services para usar a Autenticação de Formulários, use a SSL (Secure Sockets Layer) para todas as comunicações com o servidor de relatório para impedir que usuários mal-intencionados obtenham acesso ao cookie de outro usuário. O SSL permite que os clientes e um servidor de relatório se autentiquem e garantam que nenhum outro computador possa ler o conteúdo das comunicações entre os dois computadores. Todos os dados enviados de um cliente por meio de uma conexão SSL são criptografados para que usuários mal-intencionados não possam interceptar senhas ou dados enviados a um servidor de relatório.

A Autenticação de Formulários geralmente é implementada para dar suporte a contas e autenticação para plataformas diferentes do Windows. Uma interface gráfica é apresentada a um usuário que solicita acesso a um servidor de relatório e as credenciais fornecidas são enviadas a uma autoridade de segurança para autenticação.

A Autenticação de Formulários requer que uma pessoa esteja presente para inserir credenciais. Para aplicativos autônomos que se comunicam diretamente com o serviço Web do Reporting Services, a Autenticação de Formulários deve ser combinada com um esquema de autenticação personalizado.

A Autenticação de Formulários é apropriada para o Reporting Services quando:

  • Você precisa armazenar e autenticar usuários que não têm contas do Microsoft Windows e

  • Você precisa fornecer seu próprio formulário de interface do usuário como uma página de logon entre páginas diferentes em um site.

Considere o seguinte ao escrever uma extensão de segurança personalizada que dê suporte à Autenticação de Formulários:

  • Se você usar a Autenticação de Formulários, o acesso anônimo deverá ser habilitado no diretório virtual do servidor de relatório no IIS (Serviços de Informações da Internet).

  • ASP.NET autenticação deve ser definida como Formulários. Configure ASP.NET autenticação no arquivo Web.config para o servidor de relatório.

  • O Reporting Services pode autenticar e autorizar usuários com Autenticação do Windows ou autenticação personalizada, mas não ambos. O Reporting Services não dá suporte ao uso simultâneo de várias extensões de segurança.

Consulte Também

Implementando uma extensão de segurança