Reporting Services での認証Authentication in Reporting Services

認証とは、ユーザーの本人性を立証するプロセスです。Authentication is the process of establishing a user's right to an identity. ユーザー認証にはさまざまな方法がありますが、There are many techniques that you can use to authenticate a user. 最も一般的なのはユーザー パスワードを使用する方法です。The most common way is to use passwords. たとえば、フォーム認証を実装する場合は、ユーザーに対して資格情報の提示を要求し (通常は、ログイン名とパスワードを要求するインターフェイスを使用)、データベース テーブルや構成ファイルなどのデータ ストアと照合して、そのユーザーが本人かどうかを検証します。When you implement Forms Authentication, for example, you want an implementation that queries users for credentials (usually by some interface that requests a login name and password) and then validates users against a data store, such as a database table or configuration file. 資格情報の有効性を確認できない場合は、認証プロセスが失敗し、そのユーザーは匿名ユーザーであると見なされます。If the credentials can't be validated, the authentication process fails and the user will assume an anonymous identity.

Reporting Services でのカスタム認証Custom Authentication in Reporting Services

Reporting ServicesReporting Services では、統合セキュリティを使用するか、またはユーザーの資格情報を明示的に受信して検証することによって、Windows オペレーティング システムがユーザー認証を実施します。In Reporting ServicesReporting Services, the Windows operating system handles the authentication of users either through integrated security or through the explicit reception and validation of user credentials. Reporting ServicesReporting Services では、カスタム認証を開発して追加の認証方法をサポートできます。Custom authentication can be developed in Reporting ServicesReporting Services to support additional authentication schemes. そのためには、セキュリティ拡張機能インターフェイス IAuthenticationExtension2 を使用します。This is made possible through the security extension interface IAuthenticationExtension2. レポート サーバーであらゆる拡張機能を配置および使用できるように、すべての拡張機能が IExtension ベース インターフェイスから継承されます。All extensions inherit from the IExtension base interface for any extension deployed and used by the report server. IExtension および IAuthenticationExtension2 は、Microsoft.ReportingServices.Interfaces 名前空間のメンバーです。IExtension, as well as IAuthenticationExtension2, are members of the Microsoft.ReportingServices.Interfaces namespace.

Reporting ServicesReporting Services では、レポート サーバーに対して認証を行うための主要な手段として、LogonUser メソッドがあります。The primary way to authenticate against a report server in Reporting ServicesReporting Services is the LogonUser method. Reporting Services Web サービスのこのメンバーを使用して、検証するユーザーの資格情報をレポート サーバーに渡すことができます。This member of the Reporting Services Web service can be used to pass user credentials to a report server for validation. 基になるセキュリティ拡張機能は、カスタム認証コードを含む IAuthenticationExtension2.LogonUser を実装します。Your underlying security extension implements IAuthenticationExtension2.LogonUser which contains your custom authentication code. フォーム認証のサンプルでは、LogonUser が指定された資格情報とデータベースのカスタム ユーザー ストアを比較する認証チェックを実行します。In the Forms Authentication sample, LogonUser, which performs an authentication check against the supplied credentials and a custom user store in a database. LogonUser の実装例は、次のようになります。An example of an implementation of LogonUser looks like this:

public bool LogonUser(string userName, string password, string authority)  
{  
   return AuthenticationUtilities.VerifyPassword(userName, password);  
}  
  

次のサンプル関数を使用して、指定された資格情報を検証します。The following sample function is used to verify the supplied credentials:

  
internal static bool VerifyPassword(string suppliedUserName,  
   string suppliedPassword)  
{   
   bool passwordMatch = false;  
   // Get the salt and pwd from the database based on the user name.  
   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:  
   // Use DPAPI (User Store) from Enterprise Services," and "How To:  
   // Create a DPAPI Library" for more information about how to use  
   // DPAPI to securely store connection strings.  
   SqlConnection conn = new SqlConnection(  
      "Server=localhost;" +   
      "Integrated Security=SSPI;" +  
      "database=UserAccounts");  
   SqlCommand cmd = new SqlCommand("LookupUser", conn);  
   cmd.CommandType = CommandType.StoredProcedure;  
  
   SqlParameter sqlParam = cmd.Parameters.Add("@userName",  
       SqlDbType.VarChar,  
       255);  
   sqlParam.Value = suppliedUserName;  
   try  
   {  
      conn.Open();  
      SqlDataReader reader = cmd.ExecuteReader();  
      reader.Read(); // Advance to the one and only row  
      // Return output parameters from returned data stream  
      string dbPasswordHash = reader.GetString(0);  
      string salt = reader.GetString(1);  
      reader.Close();  
      // Now take the salt and the password entered by the user  
      // and concatenate them together.  
      string passwordAndSalt = String.Concat(suppliedPassword, salt);  
      // Now hash them  
      string hashedPasswordAndSalt =  
         FormsAuthentication.HashPasswordForStoringInConfigFile(  
         passwordAndSalt,  
         "SHA1");  
      // Now verify them. Returns true if they are equal.  
      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);  
   }  
   catch (Exception ex)  
   {  
       throw new Exception("Exception verifying password. " +  
          ex.Message);  
   }  
   finally  
   {  
       conn.Close();  
   }  
   return passwordMatch;  
}  

認証フローAuthentication Flow

Reporting Services Web サービスには、Web ポータルとレポート サーバーによるフォーム認証を可能にするカスタム認証拡張機能が用意されています。The Reporting Services Web service provides custom authentication extensions to enable Forms Authentication by the web portal and the report server.

Reporting Services Web サービスの LogonUser メソッドを使用して、認証する資格情報をレポート サーバーに送信します。The LogonUser method of the Reporting Services Web service is used to submit credentials to the report server for authentication. Web サービスは HTTP ヘッダーを使用して、検証されたログオン要求の認証チケット (クッキー) をサーバーからクライアントに渡します。The Web service uses HTTP headers to pass an authentication ticket (known as a "cookie") from the server to the client for validated logon requests.

次の図は、レポート サーバーがカスタム認証拡張機能を使用するように構成されたアプリケーション配置における、Web サービスのユーザーを認証するメソッドを示しています。The following illustration depicts the method of authenticating users to the Web service when your application is deployed with a report server configured to use a custom authentication extension.

Reporting Services のセキュリティ認証フローReporting Services security authentication flow

図 2 が示すように、認証プロセスは次のようになります。As shown in Figure 2, the authentication process is as follows:

  1. クライアント アプリケーションは、ユーザーを認証するために Web サービス メソッド LogonUser を呼び出します。A client application calls the Web service LogonUser method to authenticate a user.

  2. Web サービスは、セキュリティ拡張機能の LogonUser メソッド、つまり IAuthenticationExtension2 を実装するクラスを呼び出します。The Web service makes a call to the LogonUser method of your security extension, specifically, the class that implements IAuthenticationExtension2.

  3. LogonUser の実装によって、ユーザー ストアまたはセキュリティ機関のユーザー名とパスワードが検証されます。Your implementation of LogonUser validates the user name and password in the user store or security authority.

  4. 認証の完了後に、Web サービスがクッキーを作成し、セッション用にそれを管理します。Upon successful authentication, the Web service creates a cookie and manages it for the session.

  5. Web サービスは、HTTP ヘッダーの呼び出し元アプリケーションに認証チケットを返します。The Web service returns the authentication ticket to the calling application on the HTTP header.

Web サービスがセキュリティ拡張機能によってユーザーの認証を正常に完了すると、以降の要求に使用されるクッキーが生成されます。When the Web service successfully authenticates a user through the security extension, it generates a cookie that is used for subsequent requests. クッキーをカスタム セキュリティ機関に保持することはできません。レポート サーバーがセキュリティ機関を所有していないためです。The cookie may not persist within the custom security authority because the report server does not own the security authority. クッキーは LogonUser Web サービス メソッドから返され、以降の Web サービス メソッド呼び出しおよび URL アクセスに使用されます。The cookie is returned from the LogonUser Web service method and is used in subsequent Web service method calls and in URL access.

注意

転送時にクッキーが損傷しないよう、LogonUser から返される認証クッキーの転送を Secure Sockets Layer (SSL) 暗号化を使用して保護する必要があります。In order to avoid compromising the cookie during transmission, authentication cookies returned from LogonUser should be transmitted securely using Secure Sockets Layer (SSL) encryption.

カスタム セキュリティ拡張機能をインストールした場合に URL アクセスによってレポート サーバーにアクセスすると、インターネット インフォメーション サービス (IIS) および ASP.NETASP.NET が認証チケットの転送を自動的に管理します。If you access the report server through URL access when a custom security extension is installed, Internet Information Services (IIS) and ASP.NETASP.NET automatically manage the transmission of the authentication ticket. OAP API によってレポート サーバーにアクセスする場合は、プロキシ クラスの実装に認証チケット管理用の追加サポートを含める必要があります。If you are accessing the report server through the SOAP API, your implementation of the proxy class must include additional support for managing the authentication ticket. SOAP API の使用および認証チケットの管理の詳細については、「カスタム セキュリティでの Web サービスの使用」を参照してください。For more information about using the SOAP API and managing the authentication ticket, see "Using the Web Service with Custom Security."

フォーム認証Forms Authentication

フォーム認証は ASP.NETASP.NET 認証の種類の 1 つであり、未認証ユーザーは HTML フォームにリダイレクトされます。Forms Authentication is a type of ASP.NETASP.NET authentication in which an unauthenticated user is directed to an HTML form. ユーザーが資格情報を入力すると、認証チケットを含むクッキーが発行されます。Once the user provides credentials, the system issues a cookie containing an authentication ticket. 以降の要求では、クッキーをチェックしてユーザーがレポート サーバーによって認証されているかどうかを確認します。On later requests, the system first checks the cookie to see if the user was already authenticated by the report server.

Reporting Services API から利用できるセキュリティ拡張機能インターフェイスを使用すると、フォーム認証をサポートするように Reporting ServicesReporting Services を拡張できます。Reporting ServicesReporting Services can be extended to support Forms Authentication using the security extensibility interfaces available through the Reporting Services API. フォーム認証を使用するように Reporting ServicesReporting Services を拡張する場合は、レポート サーバーとのすべての通信に Secure Sockets Layer (SSL) を使用して、悪意のあるユーザーが別のユーザーのクッキーにアクセスすることを防止します。If you extend Reporting ServicesReporting Services to use Forms Authentication, use Secure Sockets Layer (SSL) for all communications with the report server to prevent malicious users from gaining access to another user's cookie. SSL を使用した場合、クライアントとレポート サーバーが相互に認証でき、2 台のコンピューター間の通信内容を他のコンピューターから読み取ることができなくなります。SSL enables clients and a report server to authenticate each other and to ensure that no other computers can read the contents of communications between the two computers. SSL 接続で送信されたすべてのデータが暗号化されるため、悪意のあるユーザーはレポート サーバーに送信されたパスワードやデータを傍受できません。All data sent from a client through an SSL connection is encrypted so that malicious users cannot intercept passwords or data sent to a report server.

一般に、フォーム認証は、Windows 以外のプラットフォームでのアカウントおよび認証をサポートするために実装されます。Forms Authentication is generally implemented to support accounts and authentication for platforms other than Windows. レポート サーバーへのアクセスを要求するユーザーにグラフィカル インターフェイスが表示され、入力した資格情報が認証のためにセキュリティ機関に送信されます。A graphical interface is presented to a user who requests access to a report server, and the supplied credentials are submitted to a security authority for authentication.

フォーム認証では、ユーザーが資格情報を入力する必要があります。Forms Authentication requires that a person is present to enter credentials. Reporting Services Web サービスと直接通信する自動アプリケーションの場合は、フォーム認証とカスタム認証方法を併用する必要があります。For unattended applications that communicate directly with the Reporting Services Web service, Forms Authentication must be combined with a custom authentication scheme.

Reporting ServicesReporting Services でフォーム認証が適しているのは、次のような場合です。Forms Authentication is appropriate for Reporting ServicesReporting Services when:

  • MicrosoftMicrosoft Windows アカウントを持たないユーザーを格納および認証する必要がある場合。You need to store and authenticate users that do not have MicrosoftMicrosoft Windows accounts, and

  • Web サイトの異なるページ間で、ログオン ページとしてユーザー インターフェイス フォームを提供する必要がある場合。You need to provide your own user interface form as a logon page between different pages on a Web site.

フォーム認証をサポートするカスタム セキュリティ拡張機能を記述する場合は、次のことを考慮してください。Consider the following when writing a custom security extension that supports Forms Authentication:

  • フォーム認証を使用する場合は、インターネット インフォメーション サービス (IIS) のレポート サーバー仮想ディレクトリで匿名アクセスを有効にする必要があります。If you use Forms Authentication, anonymous access must be enabled on the report server virtual directory in Internet Information Services (IIS).

  • ASP.NETASP.NET 認証を Forms に設定する必要があります。authentication must be set to Forms. レポート サーバーの Web.config ファイルで ASP.NETASP.NET 認証を構成してください。You configure ASP.NETASP.NET authentication in the Web.config file for the report server.

  • Reporting ServicesReporting Services では、Windows 認証またはカスタム認証を使用してユーザーを認証および承認できますが、両方を使用することはできません。can authenticate and authorize users with either Windows Authentication or custom authentication, but not both. Reporting ServicesReporting Services では、複数のセキュリティ拡張機能を同時に使用できません。does not support simultaneous use of multiple security extensions.

参照See Also

セキュリティ拡張機能の実装Implementing a Security Extension