适用于: SQL Server 2016 (13.x) Reporting Services 及更高版本
Power BI 报表服务器
Reporting Services 2016 引入了一个新的 Web 门户以托管新的 OData API,并也托管新的报表工作负载,例如移动报表和 KPI。 此新门户依赖于更新的技术,并通过在单独的进程(名为 Microsoft.ReportingServices.Portal.WebHost.exe)中运行与熟悉的 ReportingServicesService.ex 分隔开来。 此进程不是 ASP.NET 托管的应用程序,因此中断了现有自定义安全扩展插件中的假设。 此外,自定义安全扩展插件的当前接口不允许传入任何外部上下文,留给实现者唯一的选择来检查熟知的全局 ASP.NET 对象。 由于 Microsoft.ReportingServices.Portal.WebHost.exe 进程不是 ASP.NET 托管的应用程序,因此需要对接口进行一些更改。
有何变化?
引入了可通过 IRSRequestContext 实现的一个新接口,IRSRequestContext 提供扩展插件用于做出与身份验证相关决定的更常见属性。
在以前的版本中,报表管理器位于前端,并且可以使用其自定义登录页面进行配置。 在 Reporting Services 2016 中,仅支持 reportserver 托管的一个页面,并且应对两个应用程序都进行身份验证。
实现
在以前的版本中,扩展可依赖于常见假设,即 ASP.NET 对象随时可用。 由于新门户不在 ASP.NET 中运行,因此,扩展可能会遇到对象为 NULL 的问题。
最通用的示例是访问 HttpContext.Current
读取请求信息,例如标头和 Cookie。 为了使扩展插件能够做出相同的决策,我们在提供请求信息的扩展中引入了一个新方法,并在从门户进行身份验证时调用该方法。
自定义扩展必须实现 IAuthenticationExtension2 接口才能使用这个新接口。 扩展需要实现该方法的 GetUserInfo 这两个版本,因为报表器上下文和 Microsoft.ReportingServices.Portal.WebHost.exe 过程中使用的其他版本调用此方法。 以下示例展示了此门户的一个简单实现,其中使用了 reportserver 解析的标识。
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;
}
部署和配置
自定义安全扩展插件所需的基本配置与以前的版本相同。 Web.config 和 rsreportserver.config 需要更改:有关详细信息,请参阅 报表服务器上的“配置自定义”或“窗体”身份验证。
报表管理器不再有单独的 Web.config,门户将继承与报表器终结点相同的设置。
计算机密钥
对于需要对身份验证 Cookie 进行解密的窗体身份验证,需要使用相同的计算机密钥和解密算法对这两个进程进行配置。 对于以前设置 Reporting Services 以处理横向扩展环境的用户而言,此步骤很熟悉,但现在即使是在单台计算机上进行部署也是一项要求。
你应该使用特定于部署的验证密钥,可使用一些工具来生成密钥,例如 Internet Information Services 管理器 (IIS)。 在 Internet 上可以找到其他工具。
适用于: SQL Server Reporting Services (2017 及更高版本)
Power BI 报表服务器
\ReportServer\RSReportServer.config
打开 RSReportServer.config 文件,并在 <Configuration>
部分粘贴所生成的 <machineKey>
元素。 默认情况下,RSReportServer.config 文件位于 Reporting Services 和 \Program Files\Microsoft Power BI Report Server\PBIRS\ReportServer\RSReportServer.config
Power BI 报表服务器 中\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\RSReportServer.config
。
<MachineKey ValidationKey="[YOUR KEY]" DecryptionKey=="[YOUR KEY]" Validation="AES" Decryption="AES" />
适用于:SQL Server Reporting Services (2016)
\ReportServer\web.config
打开报表服务器的 web.config file 文件,并在 <system.web>
部分粘贴所生成的 <machineKey>
元素。 默认情况下,Web.config 文件位于 \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
打开 RSWebApp 的 Microsoft.ReportingServices.Portal.WebHost.exe.config 文件,并在 <configuration>
部分粘贴生成的 <system.web>
和 <machineKey>
元素。 默认情况下,Microsoft.ReportingServices.Portal.WebHost.exe.config 文件位于 \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>
配置 Passthrough Cookie
新门户和 reportserver 使用内部的 soap API 进行通信以执行其某些操作(类似于之前版本的报表管理器)。 当需要将更多 Cookie 从门户传递到报告器时,可以使用 PassThroughCookies 属性。 有关详细信息,请参阅 配置 Web 门户以传递自定义身份验证 Cookie。
<UI>
<CustomAuthenticationUI>
<PassThroughCookies>
<PassThroughCookie>sqlAuthCookie</PassThroughCookie>
</PassThroughCookies>
</CustomAuthenticationUI>
</UI>