Utilisation du code managé (C#) pour créer un seul fournisseur de répertoire de bas FTP

par Robert McMurray

Microsoft a créé un service FTP entièrement réécrit pour Windows Server® 2008. Ce nouveau service FTP intègre de nombreuses nouvelles fonctionnalités qui permettent aux auteurs Web de publier du contenu plus facilement qu’auparavant. Il offre également aux administrateurs Web davantage d’options de sécurité et de déploiement.

Le nouveau service FTP 7.5 prend en charge l’extensibilité qui vous permet d’étendre les fonctionnalités prédéfinies intégrées au service FTP. Plus précisément, FTP 7.5 prend en charge de la création de vos propres fournisseurs d’authentification et d’autorisation. Vous pouvez également créer des fournisseurs pour la journalisation FTP personnalisée et pour déterminer les informations de répertoire de base de vos utilisateurs FTP.

Cette procédure détaillée vous guide tout au long des étapes d'utilisation du code managé pour créer un fournisseur de répertoires d'accueil FTP simple.

Prérequis

Les éléments suivants sont nécessaires pour effectuer les procédures décrites dans cet article :

  1. IIS 7.0 ou version ultérieure doit être installé sur votre serveur Windows Server 2008, et le Gestionnaire Internet Information Services (IIS) doit également être installé.

  2. Le nouveau service FTP 7.5 doit être installé.

  3. Vous devez créer un dossier racine pour la publication FTP.

  4. Vous devez utiliser Visual Studio 2008.

    Remarque

    Si vous utilisez une version antérieure de Visual Studio, certaines des étapes décrites dans cette procédure pas à pas peuvent ne pas être correctes.

  5. Un répertoire de base pour chaque utilisateur doit être créé ; l’exemple de code utilise C:\Ftpusers\%*UserName*%, mais vous pouvez le modifier si nécessaire.

Étape 1 : configurer l’environnement de projet

Dans cette étape, vous allez créer un projet dans Visual Studio 2008 pour le fournisseur de version de démonstration.

  1. Ouvrez Microsoft Visual Studio 2008.

  2. Cliquez sur le menu Fichier, puis Nouveau, puis Projet.

  3. Dans la boîte de dialogue Nouveau projet :

    • Choisissez Visual C# comme type de projet.
    • Choisissez La bibliothèque de classes comme modèle.
    • Saisissez FtpHomeDirectoryDemo comme nom du projet.
    • Cliquez sur OK.
  4. Lorsque le projet s’ouvre, ajoutez un chemin d’accès de référence à la bibliothèque d’extensibilité FTP :

    • Cliquez sur Project, puis sur Propriétés FtpHomeDirectoryDemo.

    • Cliquez sur l’onglet Chemins d’accès de référence.

    • Saisissez le chemin d'accès à l'assembly d'extensibilité FTP pour votre version de Windows, où le disque local C: est votre lecteur de système d'exploitation :

      • Pour Windows Server 2008 et Windows Vista : C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
      • Pour Windows 7 : C:\Program Files\Reference Assemblies\Microsoft\IIS
    • Cliquez sur Ajouter un dossier.

  5. Ajoutez une clé de nom fort au projet :

    • Cliquez sur Project, puis sur Propriétés FtpHomeDirectoryDemo.
    • Cliquez sur l'onglet Signature .
    • Cochez la case Signer l’assembly.
    • Choisissez <Nouvelle> dans la zone de liste déroulante nom de clé forte.
    • Saisissez FtpHomeDirectoryDemoKey comme nom du fichier de clé.
    • Si vous le souhaitez, entrez un mot de passe pour le fichier de clé ; sinon, décochez la case Protéger mon fichier de clé avec un mot de passe.
    • Cliquez sur OK.
  6. Facultatif : vous pouvez ajouter un événement de build personnalisé pour ajouter automatiquement la DLL au Global Assembly Cache (GAC) sur votre ordinateur de développement :

    • Cliquez sur Project, puis sur Propriétés FtpHomeDirectoryDemo.

    • Cliquez sur l’onglet Générer des événements.

    • Dans la boîte de dialogue Ligne de commande de l'événement post-build, saisissez la commande suivante :

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

Étape 2 : Créer la classe d'extensibilité

Dans cette étape, vous allez implémenter l’interface d’extensibilité pour le fournisseur de démonstration.

  1. Ajoutez une référence à la bibliothèque d’extensibilité FTP pour le projet :

    • Cliquez sur Projet, puis sur Ajouter une référence
    • Sous l’onglet .NET, cliquez sur Microsoft.Web.FtpServer.
    • Cliquez sur OK.
  2. Ajoutez une référence à System.Web pour le projet :

    • Cliquez sur Projet, puis sur Ajouter une référence
    • Sous l’onglet .NET, cliquez sur System.Web.
    • Cliquez sur OK.
  3. Ajoutez le code de la classe d'authentification :

    • Dans l’Explorateur de solutions, double-cliquez sur le fichier Class1.cs.

    • Supprimez le code existant.

    • Collez le code suivant dans l’éditeur :

      using System;
      using Microsoft.Web.FtpServer;
       
      namespace FtpHomeDirectory
      {
          public class FtpHomeDirDemo : BaseProvider,
              IFtpHomeDirectoryProvider
          {
              string IFtpHomeDirectoryProvider.GetUserHomeDirectoryData(
                  string sessionId,
                  string siteName,
                  string userName)
              {
                  // Note: You would add your own custom logic here.
                  // Return the user's home directory based on their user name.
                  return @"C:\Ftpusers\" + userName;
              }
          }
      }
      
  4. Enregistrez et compilez le projet.

Remarque

Si vous n'avez pas utilisé les étapes facultatives pour inscrire les assemblys dans le GAC, vous devez copier manuellement les assemblys sur votre ordinateur IIS et ajouter les assemblys au GAC à l'aide de l'outil Gacutil.exe. Pour en savoir plus, consultez l'article Gacutil.exe (Outil Global Assembly Cache).

Étape 3 : Ajouter le fournisseur d’annuaires domestiques au protocole FTP

Dans cette étape, vous allez ajouter le fournisseur de démonstration à votre service FTP et au site Web par défaut.

  1. Déterminez les informations d'assembly pour le fournisseur d'extensibilité :

    • Dans l'Explorateur Windows, ouvrez votre chemin d'accès C:\Windows\assembly, où le disque local C: est votre lecteur de système d'exploitation.
    • Recherchez l'assembly FtpHomeDirectoryDemo.
    • Cliquez avec le bouton droit sur l’assembly, puis cliquez sur Propriétés.
    • Copiez la valeur Culture ; par exemple, Neutre.
    • Copiez le numéro de version, par exemple 1.0.0.0.
    • Copiez la valeur du jeton de clé publique, par exemple 426f62526f636b73.
    • Cliquez sur Annuler.
  2. Ajoutez le fournisseur d'extensibilité à la liste globale des fournisseurs FTP :

    • Ouvrez le Gestionnaire Internet Information Services (IIS).

    • Cliquez sur le nom de votre ordinateur dans le volet Connexions.

    • Double-cliquez sur Authentification FTP dans la fenêtre principale.

    • Cliquez sur Fournisseurs personnalisés dans le volet Actions.

    • Cliquez sur S'inscrire.

    • Saisissez FtpHomeDirectoryDemo comme nom du fournisseur.

    • Cliquez sur Fournisseur managé (.NET).

    • Saisissez les informations d'assembly pour le fournisseur d'extensibilité à l'aide des informations que vous avez copiées précédemment. Par exemple :

      FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
      
    • Cliquez sur OK.

    • Décochez la case FtpHomeDirectoryDemo dans la liste des fournisseurs.

    • Cliquez sur OK.

  3. Ajouter le fournisseur personnalisé à un site :

    • Pour le moment, il n’existe aucune interface utilisateur qui vous permet d’ajouter des fonctionnalités personnalisées à un site. Vous devrez donc utiliser la ligne de commande suivante :

      AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
      
  4. Configurez l’isolation utilisateur pour utiliser un fournisseur personnalisé :

    • Pour le moment, il n’existe aucune interface utilisateur qui vous permet de spécifier des fonctionnalités personnalisées pour l’isolation des utilisateurs. Vous devez donc utiliser la ligne de commande suivante :

      AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
      

Résumé

Dans cette procédure pas à pas, vous avez appris à :

  • Créez un projet dans Visual Studio 2008 pour un fournisseur de répertoires de base FTP personnalisé.
  • Implémentez l'interface d'extensibilité pour les recherches de répertoires d'accueil FTP personnalisées.
  • Ajoutez un fournisseur d'annuaires domestiques personnalisé à votre service FTP.

Lorsque les utilisateurs se connectent à votre site FTP, le service FTP définit le répertoire de base de chaque utilisateur sur le chemin que vous avez spécifié dans le fournisseur de démonstration.