次の方法で共有


IReportServerCredentials インターフェイス

Reporting Services レポート サーバーへの接続に使用する資格情報をアプリケーションが提供できるようにします。

名前空間:  Microsoft.Reporting.WebForms
アセンブリ:  Microsoft.ReportViewer.WebForms (Microsoft.ReportViewer.WebForms.dll)

構文

'宣言
Public Interface IReportServerCredentials
'使用
Dim instance As IReportServerCredentials
public interface IReportServerCredentials
public interface class IReportServerCredentials
type IReportServerCredentials =  interface end
public interface IReportServerCredentials

IReportServerCredentials 型は、以下のメンバーを公開しています。

プロパティ

  名前 説明
パブリック プロパティ ImpersonationUser ReportViewer コントロールがレポート サーバーに接続するときに借用するユーザーの System.Security.Principal.WindowsIdentity を取得または設定します。
パブリック プロパティ NetworkCredentials レポート サーバーでの認証に使用されるネットワーク資格情報を取得または設定します。

Top

メソッド

  名前 説明
パブリック メソッド GetFormsCredentials フォーム認証用に構成されているレポート サーバーへの接続に使用される情報を提供します。

Top

説明

IReportServerCredentials インターフェイスを実装する場合、ReportViewer コントロールによってオブジェクトのインスタンスが ASP.NET セッションに格納されることを理解しておくことが重要です。サーバーの ASP.NET セッションが Reporting Services などにアウト プロセスで格納されている場合、クラスは格納のためにシリアル化できるように Serializable としてマークされる必要があります。

また、必須ではありませんが、IReportServerCredentials インターフェイスをステートレス オブジェクトとして実装することもお勧めします。これにより、オブジェクトがシリアル化されるときにユーザー名やパスワードなどの資格情報が格納されなくなります。

ReportViewer コントロールで資格情報を指定する方法の詳細については、「ReportViewer Web サーバー コントロールの接続と資格情報の指定」を参照してください。

使用例

次の例は、格納のためにシリアル化できるように Serializable としてマークされている IReportServerCredentials の実装を示しています。資格情報は、Web.config ファイルから取得されます。この実装では、すべてのクライアント要求で同じ資格情報を使用してレポート サーバーに接続します。

この例を使用する前に、アプリケーションの Web.config ファイルの appSettings ブロックに MyReportViewerUser、MyReportViewerPassword、および MyReportViewerDomain の 3 つのキーと値のペアを追加する必要があります。これらの値は、レポート サーバーへの接続に使用されるユーザー名、パスワード、およびドメインに対応します。

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

関連項目

参照

Microsoft.Reporting.WebForms 名前空間

IReportServerConnection2