マネージ コード (C#) を使用して単純な FTP 認証プロバイダーを作成する方法

公開日: 2009 年 3 月 18 日 (作業者: iisteam (英語))

更新日: 2009 年 9 月 15 日 (作業者: iisteam (英語))

マイクロソフトでは、Windows Server® 2008 用に完全に書き換えた新しい FTP サービスを作成しました。この新しい FTP サービスでは多くの新機能が追加され、Web サイト作成者は簡単にコンテンツを発行でき、Web 管理者は多くのセキュリティ オプションと展開オプションを使用できます。

この新しい FTP 7.5 サービスでは、FTP サービスに含まれる組み込み機能の拡張を可能にする拡張機能がサポートされます。具体的には、FTP 7.5 で、独自の認証プロバイダーおよび承認プロバイダーの作成がサポートされます。さらに、カスタム FTP ログ作成および FTP ユーザーのホーム ディレクトリ情報の判定を行うためのプロバイダーを作成することもできます。

このチュートリアルでは、マネージ コードを使用して単純な FTP 認証プロバイダーを作成するステップを説明します。

必要条件

この記事の手順を完了するには、以下の項目が必須です。

  1. Windows Server 2008 サーバーに IIS 7 がインストールされている必要があります。また、インターネット インフォメーション サービス (IIS) マネージャーもインストールされている必要があります。
  2. 新しい FTP 7.5 サービスがインストールされている必要があります。FTP 7.5 サービスは、Web サイト (https://www.iis.net/(英語)) からダウンロードしてインストールできます。次のいずれかのリンクを使用してください。
  3. FTP 発行用のルート フォルダーを作成する必要があります。
  4. Visual Studio 2008 を使用する必要があります。(メモ: Visual Studio の旧バージョンを使用すると、このチュートリアルのステップの一部が不正確になる可能性があります)。

ステップ 1: プロジェクト環境のセットアップ

このステップでは、デモ プロバイダー用のプロジェクトを Visual Studio 2008 で作成します。

Microsoft Visual Studio 2008 を開きます。

[ファイル] メニューの [新規作成] をクリックし、[プロジェクト] をクリックします。

[新しいプロジェクト] ダイアログ ボックスで以下の操作を行います。

  • プロジェクトの種類として [Visual C#] を選択します。
  • テンプレートとして [クラス ライブラリ] を選択します。
  • プロジェクト名として「FtpAuthenticationDemo」と入力します。
  • [OK] をクリックします。

プロジェクトが開いたら、以下の操作を行って FTP 拡張機能ライブラリへの参照パスを追加します。

[プロジェクト] メニューの [FtpAuthenticationDemo のプロパティ] をクリックします。

[参照パス] タブをクリックします。

お使いの Windows バージョン用の FTP 拡張機能アセンブリへのパスを入力します。次は、オペレーティング システム ドライブが C: の場合です。

  • Windows Server 2008 および Windows Vista の場合:
    C:\Windows\assembly\GAC_MSIL\Microsoft.Web.FtpServer\7.5.0.0__31bf3856ad364e35
  • Windows 7 の場合:
    C:\Program Files\Reference Assemblies\Microsoft\IIS

[フォルダの追加] をクリックします。

厳密な名前のキーをプロジェクトに追加します。

  • [プロジェクト] メニューの [FtpAuthenticationDemo のプロパティ] をクリックします。
  • [署名] タブをクリックします。
  • [アセンブリの署名] チェック ボックスをオンにします。
  • 厳密なキー名を選択するドロップダウン ボックスから [<新規作成>] を選択します。
  • キー ファイルの名前として「FtpAuthenticationDemoKey」と入力します。
  • 必要な場合、キー ファイル用のパスワードを入力します。不要な場合は、[キー ファイルをパスワードで保護する] チェック ボックスをオフにします。
  • [OK] をクリックします。

オプション: カスタム ビルド イベントを追加して、開発用コンピューター上のグローバル アセンブリ キャッシュ (GAC) に DLL を自動的に追加できます。

  • [プロジェクト] メニューの [FtpAuthenticationDemo のプロパティ] をクリックします。

  • [ビルド イベント] タブをクリックします。

  • [ビルド後に実行するコマンド ライン] ダイアログ ボックスに、次を入力します。

    net stop ftpsvc
    call "%VS90COMNTOOLS%\vsvars32.bat">null
    gacutil.exe /if "$(TargetPath)"
    net start ftpsvc
    

プロジェクトを保存します。

ステップ 2: 拡張機能クラスの作成

このステップでは、デモ プロバイダー用の拡張機能インターフェイスを実装します。

  1. プロジェクトに FTP 拡張機能ライブラリへの参照を追加します。

    • [プロジェクト] メニューの [参照の追加] をクリックします。
    • [.NET] タブで、[Microsoft.Web.FtpServer] をクリックします。
    • [OK] をクリックします。
  2. プロジェクトに System.Web への参照を追加します。

    • [プロジェクト] メニューの [参照の追加] をクリックします。
    • [.NET] タブで、[System.Web] をクリックします。
    • [OK] をクリックします。
  3. 認証クラスのコードを追加します。

    • [ソリューション エクスプローラー] で [Class1.cs] ファイルをダブルクリックします。

    • 既存のコードを削除します。

    • エディターに次のコードを貼り付けます。

      using System;
      using Microsoft.Web.FtpServer;
      namespace FtpAuthentication
      {
      publicclass FtpAuthDemo : BaseProvider,
      IFtpAuthenticationProvider,
      IFtpRoleProvider
      {
      bool IFtpAuthenticationProvider.AuthenticateUser(
      string sessionId,
      string siteName,
      string userName,
      string userPassword,
      outstring canonicalUserName)
      {
      // メモ: 独自のカスタム ロジックをここに追加できます。
      canonicalUserName = userName;
      string strUserName = "MyUser";
      string strPassword = "MyPassword";
      // ユーザー名とパスワードが有効であることを検証します。// メモ: この例では、ユーザー名の大文字と小文字は区別されず、// パスワードの大文字と小文字は区別されます。if (((userName.Equals(strUserName,
      StringComparison.OrdinalIgnoreCase))==true) &&
      
      userPassword == strPassword)
      {
      returntrue;
      }
      else
      {
      returnfalse;
      }
      }
      bool IFtpRoleProvider.IsUserInRole(
      string sessionId,
      string siteName,
      string userName,
      string userRole)
      {
      // メモ: 独自のカスタム ロジックをここに追加できます。string strUserName = "MyUser";
      string strRoleName = "MyRole";
      // ユーザー名と役割名が有効であることを検証します。// メモ: この例では、ユーザー名と役割名の両方とも// 大文字と小文字は区別されません。if (((userName.Equals(strUserName,
      StringComparison.OrdinalIgnoreCase))==true) &&
      
      ((userRole.Equals(strRoleName,
      StringComparison.OrdinalIgnoreCase))==true))
      {
      returntrue;
      }
      else
      {
      returnfalse;
      }
      }
      }
      }
      
  4. プロジェクトを保存してビルドします。

メモ: GAC にアセンブリを登録するオプションのステップを使用しなかった場合は、アセンブリを IIS 7 コンピューターに手動でコピーし、Gacutil.exe ツールを使用して GAC にアセンブリを追加する必要があります。詳細については、マイクロソフトの MSDN Web サイトの次のトピックを参照してください。

グローバル アセンブリ キャッシュ ツール (Gacutil.exe)

ステップ 3: FTP への認証プロバイダーの追加

このステップでは、デモ プロバイダーを FTP サービスおよび既定の Web サイトに追加します。

  1. 拡張機能プロバイダー用のアセンブリ情報を判断します。
    • Windows Explorer で、パス C:\Windows\assembly を開きます。ここで、C: はオペレーティング システム ドライブです。
    • FtpAuthenticationDemo アセンブリを探します。
    • アセンブリを右クリックし、[プロパティ] をクリックします。
    • [カルチャ] の値 ([Neutral] など) をコピーします。
    • [バージョン] 番号 ([1.0.0.0] など) をコピーします。
    • [公開キー トークン] の値 ([426f62526f636b73] など) をコピーします。
    • [キャンセル] をクリックします。
  2. FTP 認証プロバイダーのグローバル リストに拡張機能プロバイダーを追加します。
    • インターネット インフォメーション サービス (IIS) マネージャーを開きます。
    • [接続] ウィンドウで、コンピューターの名前をクリックします。
    • メイン ウィンドウで [FTP 認証] をダブルクリックします。
    • [操作] ウィンドウで、[カスタム プロバイダー] をクリックします。
    • [登録] をクリックします。
    • プロバイダーの [名前] に「FtpAuthenticationDemo」と入力します。
    • [マネージ プロバイダー (.NET)] をクリックします。
    • 前にコピーした情報を使用して、拡張機能プロバイダーのアセンブリ情報を入力します。次に例を示します。
      FtpAuthentication.FtpAuthDemo,FtpAuthenticationDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
    • [OK] をクリックします。
    • プロバイダーの一覧の [FtpAuthenticationDemo] チェック ボックスをオフにします。
    • [OK] をクリックします。
  3. FTP サイト用のカスタム認証プロバイダーを追加します。
    • インターネット インフォメーション サービス (IIS) マネージャーで FTP サイトを開きます。
    • メイン ウィンドウで [FTP 認証] をダブルクリックします。
    • [操作] ウィンドウで、[カスタム プロバイダー] をクリックします。
    • プロバイダーの一覧で [FtpAuthenticationDemo] をオンにします。
    • [OK] をクリックします。
  4. 認証プロバイダー用の承認規則を追加します。
    • メイン ウィンドウで [FTP 承認規則] をダブルクリックします。
    • [操作] ウィンドウで、[許可規則の追加] をクリックします。
    • 以下のどちらかの承認規則を追加できます。
      • 指定されたユーザー:
        • アクセスのオプションで [指定されたユーザー] を選択します。
        • ユーザー名として「MyUser」と入力します。
      • 役割またはグループ:
        • アクセスのオプションで [指定された役割またはユーザー グループ] を選択します。
        • 役割名として「MyRole」と入力します。
    • [アクセス許可] オプションで、[読み取り] および [書き込み] を選択します。
    • [OK] をクリックします。

まとめ

このチュートリアルでは、次について学びました。

  • カスタム FTP 認証プロバイダー用に Visual Studio 2008 でプロジェクトを作成する方法
  • カスタム FTP 認証用の拡張機能インターフェイスの実装方法
  • FTP サービスへのカスタム認証プロバイダーの追加方法

ユーザーが FTP サイトに接続したときに、FTP サービスはカスタム認証プロバイダーを使用してユーザーの認証を試行します。この認証に失敗すると、FTP サービスは他の組み込みプロバイダーまたは認証プロバイダーを使用してユーザーを認証します。

関連コンテンツ

記事