Procédure : Utiliser DPAPI (magasin d'utilisateurs) à partir de ASP.NET avec les services Microsoft Enterprise Services
Sur cette page
Objectifs
S'applique à
Résumé
Points à connaître
Créer un composant desservi fournissant des méthodes Encrypt et Decrypt
Appeler la bibliothèque de classes DPAPI gérées
Créer une classe factice de lancement du composant desservi
Créer un compte Windows pour exécuter l'application Microsoft Enterprise Services et le service Windows
Configurer, inscrire le composant desservi et lui attribuer un nom fort
Créer une application de service Windows de lancement du composant desservi
Installer et démarrer l'application de service Windows
Créer une application Web pour tester les routines de cryptage et de décryptage
Modifier l'application Web pour lire une chaîne de connexion cryptée à partir d'un fichier de configuration d'application
Ressources supplémentaires
Objectifs
Ce module vous permet d'effectuer les opérations suivantes :
-
créer une application Web qui utilise la bibliothèque de cryptage DPAPI générée dans le cadre de la section « Procédure : Créer une bibliothèque DPAPI » afin de crypter et de décrypter les données de sécurité sensibles ;
-
créer un composant desservi qui appelle la bibliothèque de cryptage DPAPI dans le contexte d'un compte de service défini afin de permettre à la bibliothèque DPAPI d'accéder au magasin de clés d'utilisateurs dans le cadre du cryptage et du décryptage des données ;
-
lire les données cryptées du fichier Web.config.
S'applique à
Ce module s'applique aux produits et technologies suivants :
-
Microsoft® Windows® XP ou Windows 2000 Server (avec le Service Pack 3) et systèmes d'exploitation ultérieurs
-
Microsoft .NET Framework version 1.0 (avec le Service Pack 2)
-
Microsoft Visual Studio® 1.0 .NET et versions ultérieures
-
Microsoft SQL Server? 2000 (avec le Service Pack 2) et versions ultérieures
-
Microsoft Visual C#® .NET
Résumé
Les applications Web doivent souvent stocker dans les fichiers de configuration d'application des données sensibles, telles que les chaînes de connexion de base de données et les informations d'identification de compte de service. Pour des raisons de sécurité, ces éléments ne doivent jamais être stockés sous forme de texte brut. Ces informations doivent toujours être cryptées avant leur stockage.
Ce module décrit comment utiliser la bibliothèque de cryptage DPAPI (Data Protection API) créée dans la section « Procédure : Créer une bibliothèque DPAPI » à partir d'une application ASP.NET. L'application utilise un composant desservi pour accéder à la bibliothèque de cryptage DPAPI afin de charger un profil d'utilisateur Windows et de permettre à cette bibliothèque de faire appel à un magasin de clés d'utilisateurs.
Points à connaître
La méthode décrite dans ce module utilise un composant desservi .NET exécuté dans une application serveur Microsoft Enterprise Services (COM+). L'objectif est ici d'effectuer le traitement DPAPI pour les raisons figurant dans la section suivante, « Pour quelle raison utiliser les services Microsoft Enterprise Services ? ». La méthode utilise également un service Windows pour les raisons décrites dans la section « Pour quelle raison utiliser un service Windows ? ». La configuration de la solution est illustrée dans la figure 1.
Figure 1
L'application Web ASP.NET utilise un composant desservi dans une application serveur Microsoft Enterprise Services pour créer une interaction avec DPAPI.
Dans la figure 1, les événements qui se succèdent sont les suivants :
-
Le gestionnaire de contrôle des services Windows démarre avec le service Win32® et charge automatiquement le profil d'utilisateur associé au compte sous lequel le service est exécuté. Ce même compte Windows est utilisé pour exécuter l'application Microsoft Enterprise Services.
-
Le service Win32 appelle une méthode de lancement sur le composant desservi, qui démarre l'application Microsoft Enterprise Services et charge le composant desservi.
-
L'application Web extrait la chaîne cryptée à partir du fichier Web.config.
-
L'application appelle une méthode sur le composant desservi pour décrypter la chaîne de connexion.
-
Le composant desservi interagit avec DPAPI à l'aide de la méthode P/Invoke pour appeler les fonctions Win32 DPAPI.
-
La chaîne décryptée est renvoyée vers l'application Web.
Pour quelle raison utiliser les services Microsoft Enterprise Services ?
DPAPI nécessite un mot de passe de compte Windows pour extraire la clé de cryptage. Le compte exploité par DPAPI est obtenu à partir du jeton du thread en cours (si le thread qui appelle DPAPI emprunte alors une identité) ou du jeton de processus. En outre, l'utilisation de DPAPI avec le magasin d'utilisateurs nécessite l'association du profil d'utilisateur avec le compte chargé. L'application Web ASP.NET rencontre les problèmes suivants si elle doit se servir de la bibliothèque DPAPI avec le magasin d'utilisateurs :
-
Les appels vers DPAPI à partir d'une application ASP.NET exécutée sous le compte ASPNET par défaut échoueront. Ce problème est dû au fait que le compte ASPNET ne possède pas de profil d'utilisateur chargé.
-
Si une application Web ASP.NET est configurée de manière à emprunter l'identité de ses appelants, le thread d'application ASP.NET possède un jeton d'emprunt d'identité du thread associé. La session de connexion associée à ce jeton d'emprunt d'identité est une session de connexion réseau (utilisée sur le serveur pour représenter l'appelant). Les sessions de connexion réseau n'entraînent pas le chargement de profils d'utilisateurs. Il est également impossible d'extraire une clé de cryptage à partir du mot de passe, car le serveur ne dispose pas du mot de passe de l'utilisateur dont l'identité est empruntée (sauf si l'application fait appel à l'authentification de base).
Pour passer outre ces limitations, vous pouvez utiliser un composant desservi dans une application serveur Microsoft Enterprise Services (avec une identité de processus fixe) pour fournir des services de cryptage et de décryptage à l'aide de DPAPI.
Pour quelle raison utiliser un service Windows ?
Un service Windows est utilisé dans cette solution pour garantir le chargement automatique d'un profil d'utilisateur. Lorsque le gestionnaire de contrôle des services Windows (SCM) démarre un service, il charge également le profil du compte sous lequel le service doit être exécuté.
Ce service est ensuite utilisé pour charger le composant desservi, ce qui entraîne le démarrage de l'application serveur Microsoft Enterprise Services (dans une instance de Dllhost.exe).
Puisque le service Windows et le composant desservi sont configurés en vue d'une exécution à l'aide du même compte doté de privilèges minimum, le composant desservi dispose d'un accès au profil d'utilisateur chargé et peut donc appeler les fonctions DPAPI pour crypter et décrypter des données.
Si le composant desservi n'est pas lancé à partir d'un service Windows (et si ce service n'intervient pas dans l'opération) le profil d'utilisateur n'est pas chargé automatiquement. Une API Win32 peut être appelée pour charger un profil d'utilisateur (LoadUserProfile). Elle nécessite cependant que le code d'appel appartienne au groupe Administrateurs, ce qui est contraire au principe de l'exécution avec des privilèges minimum.
Ce service doit être exécuté dès que les méthodes Encrypt et Decrypt du composant desservi sont appelées. Une fois les services Windows arrêtés, le profil configuré est automatiquement déchargé. À ce stade, les méthodes DPAPI au sein du composant desservi cessent de fonctionner.
Remarques
-
DPAPI peut fonctionner avec le magasin de l'ordinateur ou le magasin d'utilisateurs (qui nécessite un profil d'utilisateur chargé). DPAPI exploite par défaut le magasin d'utilisateurs, même s'il est possible d'indiquer que le magasin de l'ordinateur peut être utilisé en transmettant l'indicateur CRYPTPROTECT_LOCAL_MACHINE aux fonctions DPAPI.
-
La méthode du profil utilisateur (adoptée dans ce module) permet d'appliquer une couche de sécurité supplémentaire, car elle limite le nombre de personnes pouvant accéder au secret. Seul l'utilisateur qui crypte les données peut les décrypter. Cependant, l'emploi du profil d'utilisateur nécessite un effort de développement supplémentaire lorsque l'interface DPAPI est utilisée à partir d'une application Web ASP.NET. Vous devrez en effet réaliser des opérations explicites pour charger et décharger les profils d'utilisateurs (ASP.NET 1.0 ne charge pas automatiquement les profils d'utilisateurs).
-
Pour plus d'informations sur l'utilisation de DPAPI avec le magasin de l'ordinateur (directement) à partir d'une application Web ASP.NET (sans faire appel à une application Microsoft Enterprise Services), consultez la section « Procédure : Utiliser DPAPI (magasin de l'ordinateur) à partir de ASP.NET » dans ce guide.
Créer un composant desservi fournissant des méthodes Encrypt et Decrypt
Cette procédure permet de créer un composant desservi qui met à disposition les méthodes Encrypt et Decrypt. Dans une procédure ultérieure, celles-ci seront appelées à l'aide d'une application Web ASP.NET, lorsque des services de cryptage seront nécessaires.
-
Pour créer un composant desservi fournissant des méthodes Encrypt et Decrypt
-
Démarrez Visual Studio .NET et créez un projet de bibliothèque de classes Visual C# nommé DPAPIComp.
-
Utilisez l'Explorateur de solutions pour renommer Class1.cs en DataProtectorComp.cs.
-
Dans DataProtectorComp.cs, renommez Class1 en DataProtectorComp et renommez également le constructeur par défaut de manière appropriée.
-
Ajoutez une référence d'assembly à l'assembly System.EnterpriseServices.dll.
-
Ajoutez les instructions using suivantes en haut du fichier DataProtectorComp.cs.
using System.EnterpriseServices; using System.Security.Principal; using System.Runtime.InteropServices;
-
Extrayez la classe DataProtectorComp à partir de la classe ServicedComponent.
public class DataProtectorComp : ServicedComponent
-
Ajoutez les deux méthodes publiques vides suivantes à la classe DataProtectorComp.
public byte[] Encrypt(byte[] plainText) {} public byte[] Decrypt(byte[] cipherText) {}
-
Appeler la bibliothèque de classes DPAPI gérées
Cette procédure appelle la bibliothèque de classes DPAPI gérées pour crypter et décrypter des données. Cette bibliothèque de classes encapsule les appels vers les fonctions DPAPI Win32. Si vous ne l'avez pas encore créée, consultez la section « Procédure : Créer une bibliothèque DPAPI » dans ce guide.
-
Pour appeler la bibliothèque de classes DPAPI gérées
-
Ajoutez une référence à un fichier à l'assembly DataProtection.dll.
-
Ajoutez l'instruction using suivante sous les instructions using existantes du fichier DataProtectorComp.cs.
using DataProtection;
-
Ajoutez le code suivant à la méthode Encrypt pour crypter les données fournies.
DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE ); byte[] cipherText = null; try { cipherText = dp.Encrypt(plainText, null); } catch(Exception ex) { throw new Exception("Exception liée au cryptage. " + ex.Message); } return cipherText; -
Ajoutez le code suivant à la méthode Decrypt pour décrypter les données codées fournies.
DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE ); byte[] plainText = null; try { plainText = dp.Decrypt(cipherText,null); } catch(Exception ex) { throw new Exception("Exception liée au décryptage. " + ex.Message); } return plainText;
-
Créer une classe factice de lancement du composant desservi
Cette procédure permet de créer une classe factice qui met à disposition une seule méthode Launch. Celle-ci sera appelée à partir du service Windows pour démarrer l'application Microsoft Enterprise Services qui héberge le composant desservi.
-
Pour créer une classe factice qui démarre le composant desservi
-
Ajoutez une nouvelle classe Visual C# au projet et nommez-la Launcher.cs.
-
Ajoutez la méthode suivante à la classe. Cette méthode sera appelée par le service au démarrage de celui-ci.
public bool Launch() { return true; } -
Dans le menu Générer, choisissez Générer la solution.
-
Créer un compte Windows pour exécuter l'application Microsoft Enterprise Services et le service Windows
Cette procédure permet de créer un compte Windows utilisé pour exécuter l'application Microsoft Enterprise Services qui héberge le composant desservi DataProtectorComp et le service Windows. Elle permet aussi de créer un profil d'utilisateur pour le nouveau compte. Celui-ci est requis par DPAPI lors de l'emploi du magasin d'utilisateurs.
-
Pour créer un compte Windows en vue d'exécuter l'application Microsoft Enterprise Services et le service Windows
-
Créez un compte d'utilisateur local nommé DPAPIAccount. Entrez un mot de passe, désactivez la case à cocher L'utilisateur doit modifier le mot de passe à la prochaine ouverture de session, puis activez la case à cocher Le mot de passe n'expire jamais.
-
Utilisez l'outil Stratégie de sécurité locale du groupe de programmes Outils d'administration pour accorder au compte les privilèges Ouvrir une session localement et Ouvrir une session en tant que tâche.
-
-
Pour créer un profil d'utilisateur destiné au nouveau compte
-
Fermez la session Windows.
-
Reconnectez-vous à l'aide du nouveau compte DPAPIAccount.
Un profil d'utilisateur est alors créé pour ce compte. -
Fermez la session Windows et reconnectez-vous avec votre compte de développeur habituel.
-
Configurer, inscrire le composant desservi et lui attribuer un nom fort
Cette procédure signe l'assembly de composant desservi pour lui attribuer un nom fort. Il s'agit d'une condition obligatoire pour les assemblys qui contiennent des composants desservis. Vous ajouterez ensuite des attributs de niveau d'assembly à l'assembly de composants desservis utilisé pour configurer le composant desservi dans le catalogue COM+. Ensuite, vous exécuterez l'utilitaire Regsvcs.exe pour inscrire le composant desservi et créer une application serveur COM+ hôte. Enfin, vous définirez l'exécution sous forme d'identité de l'application COM+ à l'aide du compte de service créé lors de la procédure précédente.
-
Pour configurer et inscrire le composant desservi et lui attribuer un nom fort
-
Ouvrez une fenêtre de commande et remplacez le répertoire par le dossier de projet DPAPIComp.
-
Exécutez l'utilitaire sn.exe pour générer une paire de clés permettant de signer l'assembly.
sn -k dpapicomp.snk
-
Revenez dans Visual Studio .NET et ouvrez Assemblyinfo.cs.
-
Recherchez l'attribut AssemblyKeyFile et ajoutez un chemin au fichier de clé dans le dossier du projet.
[assembly: AssemblyKeyFile(@"..\..\dpapicomp.snk")]
-
Ajoutez l'instruction using suivante en haut du fichier.
using System.EnterpriseServices;
-
Ajoutez les attributs de niveau d'assembly suivants pour configurer l'application COM+ en tant qu'application serveur et indiquer le nom de l'application.
[assembly: ApplicationActivation(ActivationOption.Server)] [assembly: ApplicationName("Application d'assistance DPAPI")] -
Dans le menu Générer, choisissez Générer la solution pour construire le projet de composant desservi.
-
Ouvrez une fenêtre de commande et accédez au répertoire de sortie du projet dans lequel figure le fichier DPAPIComp.dll.
-
Utilisez regsvcs.exe pour inscrire le composant desservi et créer l'application COM+.
regsvcs DPAPIComp.dll
-
Démarrez le composant logiciel enfichable MMC (Microsoft Management Console) des services de composants.
-
Développez les dossiers Services de composants, Ordinateurs, Poste de travail et Applications COM+.
-
Recherchez Application d'assistance DPAPI et cliquez dessus avec le bouton droit, puis cliquez sur Propriétés.
-
Cliquez sur l'onglet Activation et vérifiez que le type d'application est Application serveur.
-
Cliquez sur l'onglet Identité , puis sur la case d'option Cet utilisateur.
-
Entrez DPAPIAccount comme utilisateur, indiquez le mot de passe approprié et cliquez sur OK pour fermer la boîte de dialogue Propriétés.
-
Créer une application de service Windows de lancement du composant desservi
Cette procédure permet de créer une application de service Windows simple qui exécute le composant desservi lors de son démarrage. Vous êtes ainsi assuré que le profil du compte configuré est chargé et que le composant desservi est disponible pour crypter et décrypter les données.
-
Pour créer une application de service Windows susceptible de démarrer le composant desservi
-
Démarrez une nouvelle instance de Visual Studio .NET et créez un projet de service Windows C# nommé DPAPIService.
-
Utilisez l'Explorateur de solutions pour renommer Service1.cs en DPAPIService.cs.
-
Dans DPAPIService.cs, renommez Service1 en DPAPIService et renommez le constructeur par défaut de manière appropriée.
-
Dans DPAPIService.cs, recherchez la méthode InitializedComponent et remplacez le nom du service par DPAPIService.
-
Définissez une référence aux assemblys System.EnterpriseServices.dll et System.Configuration.Install.dll.
-
Associez une référence de fichier à l'assembly DPAPIComp.
-
Ajoutez l'instruction using suivante en haut du fichier DPAPIService.cs, sous les instructions using existantes.
using DPAPIComp;
-
Recherchez la méthode Main et remplacez le code suivant :
ServicesToRun = new System.ServiceProcess.ServiceBase[]{new Service1()};par la ligne suivante :
ServicesToRun = new System.ServiceProcess.ServiceBase[]{new DPAPIService()}; -
Recherchez la méthode OnStart et ajoutez le code suivant, qui exécutera le composant DPAPIComp au démarrage du service.
Launcher launchComponent = new Launcher(); launchComponent.Launch();
-
Ajoutez un nouveau fichier de classe C# au projet et nommez-le DPAPIServiceInstaller.
-
Ajoutez les instructions using suivantes en haut du fichier DPAPIServiceInstaller , sous l'instruction using existante.
using System.ComponentModel; using System.ServiceProcess; using System.Configuration.Install;
-
Extrayez la classe DPAPIServiceInstaller à partir de la classe Installer.
public class DPAPIServiceInstaller : Installer
-
Ajoutez l'attribut RunInstaller au niveau de la classe, comme suit.
[RunInstaller(true)] public class DPAPIServiceInstaller : Installer
-
Ajoutez les deux variables de membre privé suivantes à la classe DPAPIServiceInstaller. Ces objets seront utilisés lors de l'installation du service.
private ServiceInstaller dpApiInstaller; private ServiceProcessInstaller dpApiProcessInstaller;
-
Ajoutez le code suivant au constructeur de la classe DPAPIServiceInstaller.
dpApiInstaller = new ServiceInstaller(); dpApiInstaller.StartType = System.ServiceProcess.ServiceStartMode.Manual; dpApiInstaller.ServiceName = "DPAPIService"; dpApiInstaller.DisplayName = "Service DPAPI"; Installers.Add (dpApiInstaller); dpApiProcessInstaller = new ServiceProcessInstaller(); dpApiProcessInstaller.Account = ServiceAccount.User; Installers.Add (dpApiProcessInstaller);
-
Dans le menu Générer, choisissez Générer la solution.
-
Installer et démarrer l'application de service Windows
Cette procédure permet d'installer le service Windows à l'aide de l'utilitaire installutil.exe, puis de démarrer le service.
-
Pour installer et démarrer l'application du service Windows
-
Ouvrez une fenêtre de commande et remplacez le répertoire par le répertoire Bin\Debug sous le dossier du projet DPAPIService.
-
Exécutez l'utilitaire installutil.exe pour installer le service.
Installutil.exe DPAPIService.exe
-
Dans la boîte de dialogue Définir l'ouverture de session du service, entrez le nom d'utilisateur et le mot de passe du compte créé précédemment lors de la Procédure 4, « Créer un compte Windows pour exécuter l'application Microsoft Enterprise Services et le service Windows » et cliquez sur OK.
Le nom d'utilisateur doit se présenter sous la forme « autorité\nom_utilisateur ».Affichez les résultats à l'aide de l'utilitaire installutil.exe et vérifiez que le service a été correctement installé.
-
Démarrez le composant logiciel enfichable MMC Services à partir du groupe de programmes Outils d'administration .
-
Démarrez le service DPAPI.
-
Créer une application Web pour tester les routines de cryptage et de décryptage
Cette procédure développe une application Web simple que vous utiliserez pour tester les routines de cryptage et de décryptage. Ensuite, vous l'utiliserez également pour décrypter des données conservées dans le fichier Web.config.
-
Pour créer une application Web afin de tester les routines de cryptage et de décryptage
-
Ajoutez un nouveau projet d'application Web C# nommé DPAPIWeb à la solution DPAPIComp existante.
-
Ajoutez une référence d'assembly à System.EnterpriseServices ainsi qu'une référence de projet au projet DPAPIComp.
-
Ouvrez WebForm1.aspx en mode Concepteur et créez un formulaire similaire à celui illustré dans la figure 1. Utilisez les ID mentionnés dans le tableau 1 pour les différents contrôles.
Tableau 1 : ID des contrôles WebForm1.aspx
Contrôle
ID
Zone de texte Données à crypter
txtDataToEncrypt
Données cryptées
txtEncryptedData
Données décryptées
txtDecryptedData
Bouton Crypter
btnEncrypt
Bouton Décrypter
btnDecrypt
Étiquette Erreur
lblError
Figure 2
Formulaire Web DPAPIWeb -
Double-cliquez sur le bouton Crypter pour afficher un gestionnaire d'événements de clic de bouton.
-
Ajoutez les instructions using suivantes en haut du fichier, sous les instructions using existantes.
using System.Text; using DPAPIComp;
-
Revenez au gestionnaire d'événements de clic de bouton Crypter et ajoutez le code suivant pour appeler le composant desservi DataProtectorComp, afin de crypter les données entrées au moyen du formulaire Web.
DataProtectorComp dp = new DataProtectorComp(); try { byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text); txtEncryptedData.Text = Convert.ToBase64String( dp.Encrypt(dataToEncrypt)); } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = ""; -
Affichez de nouveau le formulaire Web et double-cliquez sur le bouton Décrypter pour créer un gestionnaire d'événements de clic de bouton.
-
Ajoutez le code suivant pour appeler le composant desservi DataProtectorComp afin de décrypter les données précédemment cryptées contenues dans le champ txtEncryptedData.
DataProtectorComp dp = new DataProtectorComp(); try { byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text); txtDecryptedData.Text = Encoding.ASCII.GetString( dp.Decrypt(dataToDecrypt)); } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = ""; -
Dans le menu Générer, choisissez Générer la solution.
-
Cliquez avec le bouton droit sur WebForm1.aspx et cliquez sur Afficher dans le navigateur.
-
Entrez une chaîne de texte dans le champ Données à crypter.
-
Cliquez sur le bouton Crypter. Le composant desservi DataProtector est alors appelé au sein de l'application COM+. Les données cryptées doivent être affichées dans le champ Données cryptées.
-
Cliquez sur le bouton Décrypter et vérifiez que la chaîne de texte originale apparaît dans le champ Données décryptées.
-
Fermez la fenêtre du navigateur.
-
Remarque : si un message d'erreur signalant un refus d'accès apparaît en indiquant que le ProgID du composant est illisible à partir de HKEY_CLASSES_ROOT, vous serez probablement amené à exécuter de nouveau Regsvcs.exe pour réinscrire ce composant desservi.
Ce message d'erreur s'affiche si vous avez recompilé l'assembly de composant desservi mais que vous n'avez pas réinscrit l'assembly. Étant donné que la version d'assembly varie selon chaque version (en raison de l'attribut de version d'assembly « 1.0.* » par défaut), un nouveau CLSID est généré à chaque nouvelle version. Cette erreur est due au fait que ASP.NET ne peut accéder à ce CLSID dans le Registre, car cet identificateur n'existe pas encore. Réexécutez Regsvcs.exe et redémarrez l'application Web pour résoudre le problème.
Modifier l'application Web pour lire une chaîne de connexion cryptée à partir d'un fichier de configuration d'application
Cette procédure choisit une chaîne cryptée de connexion de base de données et place le texte codé crypté dans le fichier Web.config de l'application, au sein d'un élément <appSettings>. Vous ajouterez ensuite du code à lire et décrypterez cette chaîne à partir du fichier de configuration.
-
Pour modifier l'application Web afin de lire une chaîne de connexion cryptée à partir d'un fichier de configuration d'application
-
Revenez dans Visual Studio .NET et affichez WebForm1.aspx en mode Concepteur.
-
Ajoutez un autre bouton au formulaire. Attribuez à la propriété Text la valeur Décrypter la chaîne du fichier de configuration et associez sa propriété ID à la valeur btnDecryptConfig.
-
Double-cliquez sur le bouton pour créer un gestionnaire d'événements de clic de bouton.
-
Ajoutez l'instruction using suivante en haut du fichier, sous les instructions using existantes.
using System.Configuration;
-
Revenez au gestionnaire d'événements btnDecryptConfig_Click et ajoutez le code suivant pour récupérer une chaîne de connexion de base de données à partir de la section <appSettings> du fichier Web.config.
DataProtectorComp dec = new DataProtectorComp(); try { string appSettingValue = ConfigurationSettings.AppSettings["connectionString"]; byte[] dataToDecrypt = Convert.FromBase64String(appSettingValue); string connStr = Encoding.ASCII.GetString( dec.Decrypt(dataToDecrypt)); txtDecryptedData.Text = connStr; } catch(Exception ex) { lblError.ForeColor = Color.Red; lblError.Text = "Exception.<br>" + ex.Message; return; } lblError.Text = ""; -
Dans le menu Générer, choisissez Générer la solution pour reconstruire les projets.
-
Cliquez avec le bouton droit sur WebForm1.aspx et cliquez sur Afficher dans le navigateur.
-
Dans le champ Données à crypter, entrez une chaîne de connexion de base de données semblable à celle qui suit.
server=(local);Integrated Security=SSPI; database=Northwind
-
Cliquez sur le bouton Crypter.
-
Sélectionnez le texte codé et crypté, puis copiez-le dans le Presse-papiers.
-
Basculez vers Visual Studio .NET, ouvrez Web.config et ajoutez l'élément <appSettings> suivant en dehors de l'élément <system.web>. Associez la chaîne de connexion cryptée actuellement dans le Presse-papiers à l'attribut value.
<appSettings> <add key="connectionString" value="chaîne de connexion cryptée" /> </appSettings>
-
Enregistrez le fichier Web.config.
-
Cliquez sur le bouton Décrypter la chaîne du fichier de configuration, puis vérifiez que la chaîne de connexion de base de données cryptée est lisible dans le fichier Web.config et que la chaîne de connexion décryptée apparaît correctement dans le champ Données décryptées.
-
Ressources supplémentaires
-
« Windows Data Protection » :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp. -
« Procédure : Créer une bibliothèque DPAPI » dans ce guide.
-
« Procédure : Utiliser DPAPI (magasin de l'ordinateur) à partir de ASP.NET » dans ce guide.