Authentification des utilisateurs avec l’authentification par formulaire (C#)
par Microsoft
Découvrez comment utiliser l’attribut [Autoriser] pour protéger par mot de passe des pages particulières dans votre application MVC. Vous apprenez à 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 où sont stockées les informations de compte d’utilisateur et de rôle.
L’objectif de ce tutoriel est d’expliquer comment utiliser l’authentification par formulaire pour protéger par mot de passe 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 (quelque peu effrayante) du marteau frappant le monde qui apparaît en haut de la fenêtre Explorateur de solutions (voir 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 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 des 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 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 figure 4).
Figure 4 : Ajout d’un utilisateur à un rôle
Lorsque tout est dit et fait, 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 [Autoriser] à l’action. Vous pouvez appliquer l’attribut [Autoriser] à 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.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
}
}
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 la vue 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 Inscrire pour accéder à la vue Inscrire (voir figure 6). Vous pouvez utiliser la vue Inscrire pour créer un compte d’utilisateur.
Figure 6 : affichage Inscrire
Une fois que vous vous êtes connecté, vous pouvez voir la vue CompanySecrets (voir figure 7). Par défaut, vous continuez à être connecté jusqu’à ce que vous fermez 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 [Autoriser] 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 listing 2 contient deux nouvelles actions nommées StephenSecrets() et AdministratorSecrets().
Liste 2 – Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
[Authorize(Users="Stephen")]
public ActionResult StephenSecrets()
{
return View();
}
[Authorize(Roles = "Administrators")]
public ActionResult AdministratorSecrets()
{
return View();
}
}
}
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 compte d’utilisateur séparés par des virgules.
Seuls les utilisateurs du rôle Administrateurs peuvent appeler l’action AdministratorSecrets(). Par exemple, comme 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ù les informations de compte d’utilisateur et de rôle sont stockées. 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 voir 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 où sont stockées les 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 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 de 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 l’ajout des 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 listing 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 correct 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 de 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 de serveur de base de données. Si vous utilisez Windows XP, ajoutez le compte ASPNET comme 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 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 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 MVC ASP.NET. 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 l’utilisateur et le rôle dans une base de données de production.