Interfaccia IReportServerCredentials
Consente alle applicazioni di fornire le credenziali per la connessione a un server di rapporti Reporting Services.
Spazio dei nomi Microsoft.Reporting.WebForms
Assembly: Microsoft.ReportViewer.WebForms (in Microsoft.ReportViewer.WebForms.dll)
Sintassi
'Dichiarazione
Public Interface IReportServerCredentials
'Utilizzo
Dim instance As IReportServerCredentials
public interface IReportServerCredentials
public interface class IReportServerCredentials
type IReportServerCredentials = interface end
public interface IReportServerCredentials
Nel tipo IReportServerCredentials sono esposti i membri seguenti.
Proprietà
Nome | Descrizione | |
---|---|---|
ImpersonationUser | Recupera o imposta l'oggetto System.Security.Principal.WindowsIdentity dell'utente da rappresentare quando il controllo ReportViewer si connette a un server di rapporti. | |
NetworkCredentials | Recupera o imposta le credenziali di rete utilizzate per l'autenticazione con il server di rapporti. |
In alto
Metodi
Nome | Descrizione | |
---|---|---|
GetFormsCredentials | Specifica le informazioni che saranno utilizzate per la connessione al server di rapporti configurato per l'autenticazione basata su form. |
In alto
Osservazioni
Quando si implementa l'interfaccia IReportServerCredentials, è importante sottolineare che il controllo ReportViewer archivia l'istanza dell'oggetto in una sessione ASP.NET. Se la sessione ASP.NET del server è archiviata esternamente al processo, ad esempio in Reporting Services, la classe deve essere contrassegnata come Serializable in modo che possa essere serializzata per l'archiviazione.
Sebbene non sia obbligatorio, si consiglia di implementare l'interfaccia IReportServerCredentials come un oggetto senza stato. In tal modo le informazioni sulle credenziali,quali nome utente e password, non saranno archiviate durante la serializzazione dell'oggetto.
Per ulteriori informazioni sull'impostazione di credenziali con il controllo ReportViewer, vedere Impostazioni di connessioni e credenziali per il controllo del server Web ReportViewer.
Esempi
Di seguito è riportato un esempio di implementazione di un'interfaccia IReportServerCredentials con contrassegno Serializable perché possa essere serializzata per l'archiviazione. Le informazioni sulle credenziali sono recuperate dal file Web.config. Questa implementazione effettuerà la connessione al server di rapporti utilizzando le stesse credenziali per tutte le richieste del client.
Prima di utilizzare l'esempio, è necessario aggiungere tre coppie chiave/valore nel blocco appSettings del file Web.config dell'applicazione: MyReportViewerUser, MyReportViewerPassworde MyReportViewerDomain. I valori corrispondono al nome utente, alla password e al dominio utilizzati per connettersi al server di rapporti.
using System;
using System.Data;
using System.Configuration;
using System.Net;
using System.Security.Principal;
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;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
ReportViewer1.ServerReport.ReportServerCredentials =
new MyReportServerCredentials();
}
}
[Serializable]
public sealed class MyReportServerCredentials :
IReportServerCredentials
{
public WindowsIdentity ImpersonationUser
{
get
{
// Use the default Windows user. Credentials will be
// provided by the NetworkCredentials property.
return null;
}
}
public ICredentials NetworkCredentials
{
get
{
// Read the user information from the Web.config file.
// By reading the information on demand instead of
// storing it, the credentials will not be stored in
// session, reducing the vulnerable surface area to the
// Web.config file, which can be secured with an ACL.
// User name
string userName =
ConfigurationManager.AppSettings
["MyReportViewerUser"];
if (string.IsNullOrEmpty(userName))
throw new Exception(
"Missing user name from web.config file");
// Password
string password =
ConfigurationManager.AppSettings
["MyReportViewerPassword"];
if (string.IsNullOrEmpty(password))
throw new Exception(
"Missing password from web.config file");
// Domain
string domain =
ConfigurationManager.AppSettings
["MyReportViewerDomain"];
if (string.IsNullOrEmpty(domain))
throw new Exception(
"Missing domain from web.config file");
return new NetworkCredential(userName, password, domain);
}
}
public bool GetFormsCredentials(out Cookie authCookie,
out string userName, out string password,
out string authority)
{
authCookie = null;
userName = null;
password = null;
authority = null;
// Not using form credentials
return false;
}
}
Imports System.Net
Imports System.Security.Principal
Imports Microsoft.Reporting.WebForms
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Init(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles Me.Init
ReportViewer1.ServerReport.ReportServerCredentials = _
New MyReportServerCredentials()
End Sub
End Class
<Serializable()> _
Public NotInheritable Class MyReportServerCredentials
Implements IReportServerCredentials
Public ReadOnly Property ImpersonationUser() As WindowsIdentity _
Implements IReportServerCredentials.ImpersonationUser
Get
'Use the default windows user. Credentials will be
'provided by the NetworkCredentials property.
Return Nothing
End Get
End Property
Public ReadOnly Property NetworkCredentials() As ICredentials _
Implements IReportServerCredentials.NetworkCredentials
Get
'Read the user information from the web.config file.
'By reading the information on demand instead of storing
'it, the credentials will not be stored in session,
'reducing the vulnerable surface area to the web.config
'file, which can be secured with an ACL.
'User name
Dim userName As String = _
ConfigurationManager.AppSettings("MyReportViewerUser")
If (String.IsNullOrEmpty(userName)) Then
Throw New Exception("Missing user name from web.config file")
End If
'Password
Dim password As String = _
ConfigurationManager.AppSettings("MyReportViewerPassword")
If (String.IsNullOrEmpty(password)) Then
Throw New Exception("Missing password from web.config file")
End If
'Domain
Dim domain As String = _
ConfigurationManager.AppSettings("MyReportViewerDomain")
If (String.IsNullOrEmpty(domain)) Then
Throw New Exception("Missing domain from web.config file")
End If
Return New NetworkCredential(userName, password, domain)
End Get
End Property
Public Function GetFormsCredentials(ByRef authCookie As Cookie, _
ByRef userName As String, _
ByRef password As String, _
ByRef authority As String) _
As Boolean _
Implements IReportServerCredentials.GetFormsCredentials
authCookie = Nothing
userName = Nothing
password = Nothing
authority = Nothing
'Not using form credentials
Return False
End Function
End Class