Freigeben über


Installieren von benutzerdefinierten Sicherheitserweiterungen

Gilt für: SQL Server 2016 (13.x) Reporting Services und höher Power BI-Berichtsserver

Mit Reporting Services 2016 wurde ein neues Webportal zum Hosten neuer OData-APIs und neuer Berichtsworkloads wie mobile Berichte und KPIs eingeführt. Dieses neue Portal basiert auf den neusten Technologien und unterscheidet sich von dem bereits bekannten „ReportingServicesService.exe“-Dienst, da es in einem separaten Prozess (Microsoft.ReportingServices.Portal.WebHost.exe) ausgeführt wird. Bei diesem Prozess handelt es sich nicht um eine von ASP.NET gehostete Anwendung. Er bricht Annahmen von bereits vorhandenen benutzerdefinierten Sicherheitserweiterungen auf. Außerdem lassen aktuelle Schnittstellen es nicht zu, dass benutzerdefinierte Erweiterungen an einen externen Kontext übergeben werden, wodurch bei der Implementierung nur die Möglichkeit bleibt, bekannte globale ASP.NET-Objekte zu überprüfen. Da der Prozess „Microsoft.ReportingServices.Portal.WebHost.exe“ keine von ASP.NET gehostete Anwendung ist, mussten Änderungen an der Schnittstelle durchgeführt werden.

Was hat sich geändert?

Es wurde eine neue Schnittstelle eingeführt, die über IRSRequestContext implementiert werden kann. So werden die allgemeineren Eigenschaften bereitgestellt, die von Erweiterungen verwendet werden, um Entscheidungen in Bezug auf die Authentifizierung treffen zu können.

In den Vorgängerversionen war der Berichts-Manager das Front-End und konnte mit seiner eigenen benutzerdefinierten Anmeldeseite konfiguriert werden. In Reporting Services 2016 wird nur eine vom Berichtsserver gehostete Seite unterstützt, die bei beiden Anwendungen authentifiziert werden sollte.

Implementierung

In den Vorgängerversionen basierten Erweiterungen auf der allgemeinen Annahme, dass ASP.NET-Objekte unmittelbar verfügbar sind. Da das neue Portal nicht auf ASP.NET ausgeführt werden kann, treten mit der Erweiterung möglicherweise Probleme auf, wenn Objekte den Wert NULL haben.

Das generischste Beispiel ist der Zugriff auf Das Lesen von HttpContext.Current Anforderungsinformationen wie Kopfzeilen und Cookies. Damit Erweiterungen dieselben Entscheidungen treffen können, wurde eine neue Methode in der Erweiterung eingeführt, die die Anforderungsinformationen zur Verfügung stellt und bei der Authentifizierung vom Portal aufgerufen wird.

Benutzerdefinierte Erweiterungen müssen die IAuthenticationExtension2-Schnittstelle implementieren, um diese neue Schnittstelle verwenden zu können. Die Erweiterungen müssen beide Versionen der GetUserInfo Methode implementieren, da eine vom Berichtsserverkontext aufgerufen wird und andere, die in Microsoft.ReportingServices.Portal.WebHost.exe Prozess verwendet werden. Im folgenden Beispiel wird eine der einfachen Implementierungen für das Portal dargestellt, bei der die vom Berichtsserver aufgelöste Identität auch verwendet wird.

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;
}

Bereitstellung und Konfiguration

Es werden dieselben grundlegenden Konfigurationen für benutzerdefinierte Sicherheitserweiterungen benötigt wie für die Vorgängerreleases. Für "web.config" und "rsreportserver.config" sind Änderungen erforderlich: Weitere Informationen finden Sie unter Configure Custom or Forms authentication on the Report Server.

Für den Berichts-Manager gibt es keine separate Web.config mehr, das Portal erbt dieselben Einstellungen wie der Berichtsserverendpunkt.

Computerschlüssel

Bei der Formularauthentifizierung, für die die Entschlüsselung des Authentifizierungscookies erforderlich ist, müssen beide Prozesse mit demselben Computerschlüssel und Entschlüsselungsalgorithmus konfiguriert sein. Dieser Schritt ist Benutzern vertraut, die Reporting Services zuvor für die Arbeit an scale-out-Umgebungen eingerichtet hatten, aber jetzt ist auch für Bereitstellungen auf einem einzelnen Computer eine Anforderung.

Sie sollten einen für Ihre Bereitstellung spezifischen Validierungsschlüssel verwenden. Es gibt einige Tools wie den IIS-Manger (Internet Information Services Manager, Internetinformationsdienste-Manager), mit denen Sie Schlüssel generieren können. Andere Tools finden Sie im Internet.

Gilt für: SQL Server Reporting Services (2017 und höher) Power BI-Berichtsserver

\ReportServer\RSReportServer.config

Öffnen Sie die Datei „RSReportServer.config“, und fügen Sie im Abschnitt <Configuration> das <machineKey>-Element ein, das Sie generiert haben. Standardmäßig befindet \Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\RSReportServer.config sich die Datei "RSReportServer.config" für Reporting Services und \Program Files\Microsoft Power BI Report Server\PBIRS\ReportServer\RSReportServer.config für Power BI-Berichtsserver.

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

Gilt für: SQL Server Reporting Services (2016)

\ReportServer\web.config

Öffnen Sie die Datei „web.config“ für den Berichtsserver, und fügen Sie im Abschnitt <system.web> das <machineKey>-Element ein, das Sie generiert haben. Standardmäßig befindet sich die Datei „Web.config“ unter „\Programme\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

Öffnen Sie die Datei „Microsoft.ReportingServices.Portal.WebHost.exe.config“ für RSWebApp, und fügen Sie im Abschnitt <configuration> das <system.web>- und <machineKey>-Element ein, das Sie generiert haben. Standardmäßig befindet sich die Datei „Microsoft.ReportingServices.Portal.WebHost.exe.config“ unter \Programme\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>

Konfigurieren von Passthrough-Cookies

Das neue Portal und der Berichtsserver kommunizieren bei einigen Vorgängen über interne SOAP-APIs (ähnlich wie die Vorgängerversion des Berichts-Managers). Wenn mehr Cookies vom Portal an den Reportserver übergeben werden müssen, steht die PassThroughCookies-Eigenschaft zur Verfügung. Weitere Informationen finden Sie unter Konfigurieren des Webportals zum Übergeben von benutzerdefinierten Authentifizierungscookies.

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