Como instalar extensões de segurança personalizadas

Aplica-se a: SQL Server 2016 (13.x) Reporting Services e posterior Power BI Report Server

O Reporting Services 2016 introduziu um novo portal da Web para hospedar novas APIs do OData e para hospedar novas cargas de trabalho de relatório, como KPIs e relatórios móveis. Esse novo portal se baseia em tecnologias mais recentes e é isolado do conhecido ReportingServicesService.exe, sendo executado em um processo separado chamado Microsoft.ReportingServices.Portal.WebHost.exe. Esse processo não é um aplicativo ASP.NET hospedado e, portanto, acaba com os pressupostos das extensões de segurança personalizadas existentes. Além disso, as interfaces atuais das extensões de segurança personalizadas não permitem que nenhum contexto externo seja passado, deixando os implementadores com a única opção de inspecionar os objetos ASP.NET globais conhecidos. Como o processo de Microsoft.ReportingServices.Portal.WebHost.exe não é um aplicativo hospedado ASP.NET, algumas alterações na interface foram necessárias.

O que mudou?

Uma nova interface foi introduzida, que pode ser implementada por meio de IRSRequestContext, que fornece as propriedades mais comuns usadas pelas extensões para tomar decisões relacionadas à autenticação.

Nas versões anteriores, o Gerenciador de Relatórios era o front-end e podia ser configurado com a respectiva página de entrada personalizada. No Reporting Services 2016, há suporte para apenas uma página hospedada pelo reportserver e ela deve se autenticar em ambos os aplicativos.

Implementação

Nas versões anteriores, as extensões podiam confiar em um pressuposto comum de que os objetos ASP.NET estariam prontamente disponíveis. Como o novo portal não é executado no ASP.NET, a extensão pode ter problemas com objetos sendo NULL.

O exemplo mais genérico é o acesso HttpContext.Current para ler informações de solicitação, como cabeçalhos e cookies. Para permitir que as extensões tomem as mesmas decisões, introduzimos um novo método na extensão que fornece informações de solicitação e é chamado durante a autenticação no portal.

As extensões personalizadas precisam implementar a interface IAuthenticationExtension2 para usar essa nova interface. As extensões precisam implementar ambas as versões do GetUserInfo método, pois uma é chamada pelo contexto reportserver e outra usada em Microsoft.ReportingServices.Portal.WebHost.exe processo. O exemplo a seguir mostra uma das implementações simples para o portal, em que a identidade resolvida pelo reportserver é a que é usada.

public void GetUserInfo(IRSRequestContext requestContext, out IIdentity userIdentity, out IntPtr userId)
{
    userIdentity = null;
    if (requestContext.User != null)
    {
        userIdentity = requestContext.User;
    }

    // initialize a pointer to the current user ID to zero
    userId = IntPtr.Zero;
}

Implantação e configuração

As configurações básicas necessárias para a extensão de segurança personalizada são as mesmas das versões anteriores. São necessárias alterações para web.config e rsreportserver.config: para obter mais informações, consulte Configurar autenticação personalizada ou de formulários no servidor de relatório.

Não há mais um web.config separado para o Gerenciador de Relatórios, o portal herda as mesmas configurações que o ponto de extremidade do servidor de relatório.

Chaves do computador

Para o caso da autenticação de Formulários, que exige a descriptografia do cookie de Autenticação, os dois processos precisam ser configurados com a mesma chave do computador e algoritmo de descriptografia. Essa etapa é familiar aos usuários que já haviam configurado o Reporting Services para trabalhar em ambientes de expansão, mas agora é um requisito até mesmo para implantações em uma única máquina.

Você deve usar uma chave de validação específica para a implantação. Há várias ferramentas para gerar as chaves, como o Gerenciador do IIS (Serviços de Informações da Internet). Outras ferramentas podem ser encontradas na Internet.

Aplica-se a: SQL Server Reporting Services (2017 e posterior) Servidor de Relatórios do Power BI

\ReportServer\RSReportServer.config

Abra o arquivo RSReportServer.config e, na seção <Configuration>, cole o elemento <machineKey> que você gerou. Por padrão, o arquivo RSReportServer.config está localizado no Reporting Services e \Program Files\Microsoft Power BI Report Server\PBIRS\ReportServer\RSReportServer.config no \Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\RSReportServer.config Servidor de Relatório do Power BI.

<MachineKey ValidationKey="[YOUR KEY]" DecryptionKey=="[YOUR KEY]" Validation="AES" Decryption="AES" />

Aplica-se a: SQL Server Reporting Services (2016)

\ReportServer\web.config

Abra o arquivo web.config do ReportServer e, na seção <system.web>, cole o elemento <machineKey> gerado por você. Por padrão, o arquivo web.config está localizado em \Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\web.config.

<machineKey validationKey="[YOUR KEY]" decryptionKey=="[YOUR KEY]" validation="AES" decryption="AES" />

\RSWebApp\Microsoft.ReportingServices.Portal.exe.config

Abra o arquivo Microsoft.ReportingServices.Portal.WebHost.exe.config do RSWebApp e, na seção <configuration>, cole os elementos <system.web> e <machineKey> que você gerou. Por padrão, o arquivo Microsoft.ReportingServices.Portal.WebHost.exe.config está localizado em \Program Files\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\RSWebApp\Microsoft.ReportingServices.Portal.WebHost.exe.config.

<system.web>
    <machineKey validationKey=="[YOUR KEY]" decryptionKey=="[YOUR KEY]" validation="AES" decryption="AES" />
</system.web>

Configurar cookies de passagem

O novo portal e o reportserver se comunicam usando APIs SOAP internas para algumas de suas operações (semelhante à versão anterior do Gerenciador de Relatórios). Quando mais cookies são necessários para serem passados do portal para o servidor de relatório, a propriedade PassThroughCookies está disponível para uso. Para obter mais informações, consulte Configurar o portal da Web para passar cookies de autenticação personalizados.

<UI>
   <CustomAuthenticationUI>
      <PassThroughCookies>
         <PassThroughCookie>sqlAuthCookie</PassThroughCookie>
      </PassThroughCookies>
   </CustomAuthenticationUI>
</UI>

Mais perguntas? Experimente perguntar no fórum do Reporting Services