Authentification des utilisateurs avec l’authentification par formulaire (VB)
par Microsoft
Découvrez comment utiliser l’attribut [Authorize] pour protéger des pages particulières par mot de passe dans votre application MVC. Vous allez apprendre à utiliser l’outil d’administration de site web pour créer et gérer des utilisateurs et des rôles. Vous découvrez également comment configurer l’emplacement de stockage des informations de compte d’utilisateur et de rôle.
L’objectif de ce didacticiel est d’expliquer comment utiliser l’authentification par formulaire pour protéger les vues dans vos applications MVC ASP.NET. Vous découvrez comment utiliser l’outil d’administration de site web pour créer des utilisateurs et des rôles. Vous découvrez également comment empêcher les utilisateurs non autorisés d’appeler des actions de contrôleur. Enfin, vous allez apprendre à configurer l’emplacement où les noms d’utilisateur et les mots de passe sont stockés.
Utilisation de l’outil d’administration de site web
Avant de faire quoi que ce soit d’autre, nous devons commencer par créer des utilisateurs et des rôles. Le moyen le plus simple de créer des utilisateurs et des rôles consiste à tirer parti de l’outil d’administration de site web Visual Studio 2008. Vous pouvez lancer cet outil en sélectionnant l’option de menu Projet, ASP.NET Configuration. Vous pouvez également lancer l’outil d’administration de site web en cliquant sur l’icône (un peu effrayante) du marteau frappant le monde qui apparaît en haut de la fenêtre Explorateur de solutions (voir la figure 1).
Figure 1 : Lancement de l’outil d’administration de site web
Dans l’outil d’administration de site web, vous créez des utilisateurs et des rôles en sélectionnant l’onglet Sécurité. Cliquez sur le lien Créer un utilisateur pour créer un utilisateur nommé Stephen (voir la figure 2). Fournissez à l’utilisateur Stephen le mot de passe de votre choix (par exemple, secret).
Figure 2 – Création d’un utilisateur
Vous créez de nouveaux rôles en activant d’abord les rôles et en définissant un ou plusieurs rôles. Activez les rôles en cliquant sur le lien Activer les rôles . Ensuite, créez un rôle nommé Administrateurs en cliquant sur le lien Créer ou gérer des rôles (voir la figure 3).
Figure 3 – Création d’un rôle
Enfin, créez un utilisateur nommé Sally et associez Sally au rôle Administrateurs en cliquant sur le lien Créer un utilisateur et en sélectionnant Administrateurs lors de la création de Sally (voir la figure 4).
Figure 4 – Ajout d’un utilisateur à un rôle
Lorsque tout est dit et terminé, vous devez avoir deux nouveaux utilisateurs nommés Stephen et Sally. Vous devez également avoir un nouveau rôle nommé Administrateurs. Sally est membre du rôle Administrateurs et Stephen ne l’est pas.
Demande d’autorisation
Vous pouvez exiger l’authentification d’un utilisateur avant qu’il appelle une action de contrôleur en ajoutant l’attribut [Authorize] à l’action. Vous pouvez appliquer l’attribut [Authorize] à une action de contrôleur individuelle ou appliquer cet attribut à une classe de contrôleur entière.
Par exemple, le contrôleur de la liste 1 expose une action nommée CompanySecrets(). Étant donné que cette action est décorée avec l’attribut [Authorize], cette action ne peut pas être appelée, sauf si un utilisateur est authentifié.
Listing 1 – Controllers\HomeController.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
<Authorize()> _
Function CompanySecrets()
Return View()
End Function
End Class
Si vous appelez l’action CompanySecrets() en entrant l’URL /Home/CompanySecrets dans la barre d’adresse de votre navigateur, et que vous n’êtes pas un utilisateur authentifié, vous êtes automatiquement redirigé vers l’affichage Connexion (voir figure 5).
Figure 5 : affichage Connexion
Vous pouvez utiliser la vue Connexion pour entrer votre nom d’utilisateur et votre mot de passe. Si vous n’êtes pas un utilisateur inscrit, vous pouvez cliquer sur le lien d’inscription pour accéder à l’affichage Inscrire (voir la figure 6). Vous pouvez utiliser la vue Inscrire pour créer un compte d’utilisateur.
Figure 6 : affichage Registre
Une fois que vous vous êtes connecté, vous pouvez voir la vue CompanySecrets (voir la figure 7). Par défaut, vous continuerez à être connecté jusqu’à ce que vous fermiez la fenêtre de votre navigateur.
Figure 7 : vue CompanySecrets
Autorisation par nom d’utilisateur ou rôle d’utilisateur
Vous pouvez utiliser l’attribut [Authorize] pour restreindre l’accès à une action de contrôleur à un ensemble particulier d’utilisateurs ou à un ensemble particulier de rôles d’utilisateur. Par exemple, le contrôleur d’accueil modifié dans la liste 2 contient deux nouvelles actions nommées StephenSecrets() et AdministratorSecrets().
Listing 2 – Controllers\HomeController.vb
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
<Authorize()> _
Function CompanySecrets()
Return View()
End Function
<Authorize(Users:="Stephen")> _
Function StephenSecrets()
Return View()
End Function
<Authorize(Roles:="Administrators")> _
Function AdministratorSecrets()
Return View()
End Function
End Class
Seul un utilisateur portant le nom d’utilisateur Stephen peut appeler l’action StephenSecrets(). Tous les autres utilisateurs sont redirigés vers la vue Connexion. La propriété Users accepte une liste de noms de comptes d’utilisateur séparés par des virgules.
Seuls les utilisateurs ayant le rôle Administrateurs peuvent appeler l’action AdministratorSecrets(). Par exemple, étant donné que Sally est membre du groupe Administrateurs, elle peut appeler l’action AdministratorSecrets(). Tous les autres utilisateurs sont redirigés vers la vue Connexion. La propriété Roles accepte une liste de noms de rôles séparés par des virgules.
Configuration de l’authentification
À ce stade, vous vous demandez peut-être où sont stockées le compte d’utilisateur et les informations de rôle. Par défaut, les informations sont stockées dans une base de données SQL Express (RANU) nommée ASPNETDB.mdf située dans le dossier App_Data de votre application MVC. Cette base de données est générée automatiquement par l’infrastructure ASP.NET lorsque vous commencez à utiliser l’appartenance.
Pour afficher la base de données ASPNETDB.mdf dans la fenêtre Explorateur de solutions, vous devez d’abord sélectionner l’option de menu Projet, Afficher tous les fichiers.
L’utilisation de la base de données SQL Express par défaut est correcte lors du développement d’une application. Toutefois, vous ne souhaiterez probablement pas utiliser la base de données ASPNETDB.mdf par défaut pour une application de production. Dans ce cas, vous pouvez modifier l’emplacement de stockage des informations de compte d’utilisateur en effectuant les deux étapes suivantes :
- Ajouter les objets de base de données Application Services à votre base de données de production - Modifier la chaîne de connexion de votre application pour qu’elle pointe vers votre base de données de production
La première étape consiste à ajouter tous les objets de base de données nécessaires (tables et procédures stockées) à votre base de données de production. Le moyen le plus simple d’ajouter ces objets à une nouvelle base de données consiste à tirer parti de l’Assistant Installation de ASP.NET SQL Server (voir la figure 8). Vous pouvez lancer cet outil en ouvrant l’invite de commandes Visual Studio 2008 à partir du groupe de programmes Microsoft Visual Studio 2008 et en exécutant la commande suivante à partir de l’invite de commandes :
aspnet_regsql
Figure 8 : Assistant Installation de ASP.NET SQL Server
L’Assistant Installation ASP.NET SQL Server vous permet de sélectionner une base de données SQL Server sur votre réseau et d’installer tous les objets de base de données requis par les services d’application ASP.NET. Il n’est pas nécessaire que le serveur de base de données se trouve sur votre ordinateur local.
Notes
Si vous ne souhaitez pas utiliser l’Assistant Installation ASP.NET SQL Server, vous trouverez des scripts SQL pour ajouter les objets de base de données des services d’application dans le dossier suivant :
C:\Windows\Microsoft.NET\Framework\v2.0.50727
Après avoir créé les objets de base de données nécessaires, vous devez modifier la connexion de base de données utilisée par votre application MVC. Modifiez la chaîne de connexion ApplicationServices dans votre fichier de configuration web (web.config) afin qu’elle pointe vers la base de données de production. Par exemple, la connexion modifiée dans la liste 3 pointe vers une base de données nommée MyProductionDB (la chaîne de connexion ApplicationServices d’origine a été commentée).
Référencement 3 – Web.config
<connectionStrings>
<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>
Configuration des autorisations de base de données
Si vous utilisez la sécurité intégrée pour vous connecter à votre base de données, vous devez ajouter le compte d’utilisateur Windows approprié en tant que connexion à votre base de données. Le compte approprié varie selon que vous utilisez le serveur de développement ASP.NET ou Internet Information Services comme serveur web. Le compte d’utilisateur approprié dépend également de votre système d’exploitation.
Si vous utilisez le serveur de développement ASP.NET (le serveur web par défaut utilisé par Visual Studio), votre application s’exécute dans le contexte de votre compte d’utilisateur Windows. Dans ce cas, vous devez ajouter votre compte d’utilisateur Windows en tant que connexion au serveur de base de données.
Si vous utilisez Internet Information Services, vous devez également ajouter le compte ASPNET ou le compte NT AUTHORITY/NETWORK SERVICE en tant que connexion au serveur de base de données. Si vous utilisez Windows XP, ajoutez le compte ASPNET en tant que connexion à votre base de données. Si vous utilisez un système d’exploitation plus récent, tel que Windows Vista ou Windows Server 2008, ajoutez le compte NT AUTHORITY/NETWORK SERVICE comme connexion à la base de données.
Vous pouvez ajouter un nouveau compte d’utilisateur à votre base de données à l’aide de Microsoft SQL Server Management Studio (voir la figure 9).
Figure 9 – Création d’une connexion Microsoft SQL Server
Après avoir créé la connexion requise, vous devez mapper la connexion à un utilisateur de base de données avec les rôles de base de données appropriés. Double-cliquez sur la connexion et sélectionnez l’onglet Mappage des utilisateurs. Sélectionnez un ou plusieurs rôles de base de données des services d’application. Par exemple, pour authentifier les utilisateurs, vous devez activer le rôle de base de données aspnet_Membership_BasicAccess. Pour créer de nouveaux utilisateurs, vous devez activer le rôle de base de données aspnet_Membership_FullAccess (voir la figure 10).
Figure 10 – Ajout de rôles de base de données Application Services
Résumé
Dans ce tutoriel, vous avez appris à utiliser l’authentification par formulaire lors de la création d’une application ASP.NET MVC. Tout d’abord, vous avez appris à créer des utilisateurs et des rôles en tirant parti de l’outil d’administration de site web. Ensuite, vous avez appris à utiliser l’attribut [Authorize] pour empêcher les utilisateurs non autorisés d’appeler des actions du contrôleur. Enfin, vous avez appris à configurer votre application MVC pour stocker des informations sur les utilisateurs et les rôles dans une base de données de production.