Classe per la gestione delle credenziali in ReportViewer

Articolo che illustra la tecnica per la gestione delle credenziali nella gestione dei report tramite Reporting Services con il linguaggio di programmazione C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

Il controllo ReportViewer, è un controllo che permette di visualizzare i report, in ambiente Asp.Net e Windows application.
La visualizzazione dei report in certi contesti può comportare anche la gestione delle credenziali, ossia dare la possibilità di accedere a tali report solo a determinate utenze.
Vedremo come creare una classe che ha il compito di gestire le credenziali ed utilizzarla in un controllo reportViewer.

Stesura di codice

La classe avrà il compito di impersonare un determinato utente rilevando le informazioni dal file webconfig, questi dati riguardano nome utente, password e dominio, di un account creato in Reporting Services.  Visto che i report sono stati creati con una certa sicurezza, la visualizzazione dei report può avvenire solo utilizzando la classe nel controllo reportViewer, in modo che sia possibile visualizzare i report.
Questa classe per la sicurezza, eredita dalla classe IReportServerCredentials,

 Si riporta il codice completo della classe

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Reporting.WebForms;
using System.Security.Principal;
using System.Net;
[Serializable]
public sealed class ClasseReportServerCredentials : IReportServerCredentials
{
    public ClasseReportServerCredentials() { }
    #region IReportServerCredentials Members
    public WindowsIdentity ImpersonationUser
    {
        get
        {
            return null;
        }
    }
    public ICredentials NetworkCredentials
    {
        get
        {
            return new NetworkCredential(
                ConfigurationManager.AppSettings["ReportServerUser"],
                ConfigurationManager.AppSettings["ReportServerPassword"],
                ConfigurationManager.AppSettings["ReportServerDomain"]);
        }
    }
    public bool GetFormsCredentials(out Cookie authCookie, out string username, out string password, out string dominio)
    {
        authCookie = null;
        username = null;
        password = null;
        dominio = null;
        return false;
    }
    #endregion
}

 

Utilizzo della classe.

Supponiamo di utilizzare tale classe in ambiente Asp.Net, in una pagina inseriamo un controllo di tipo ReportViewer, e dopo aver impostato le proprietà del report, da codice, nel load della pagina, impostiamo la proprietà ReportServerCredentials con la classe precedentemente creata.
Qui di seguito si riporta il frammento di codice per l’utilizzo della classe.

    ReportViewer1.ShowBackButton = true;
                ReportViewer1.ServerReport.ReportServerCredentials = new ClasseReportServerCredentials();
                ReportViewer1.ServerReport.ReportPath = ReportPath;

 

Conclusioni

I report, creati tramite Reporting Services, offrono ottime funzionalità e prestazioni, ma in certi contesti questi report sono accessibili solo tramite una determinata utenza o gruppo di utenti, in modo da non compromettere la sicurezza dei dati, soprattutto se sono informazioni sensibili.
Si è visto come creare una classe in modo che si possa accedere a dei report, in cui sono stati configurati con determinate restrizioni. E’ importante gestire la sicurezza nelle applicazioni esposte all’esterno della propria rete (aziendale e non) per evitare possibili problemi.