Authentification des utilisateurs via l'authentification par formulaire

Rémy Mainil (Traduction)

Apprenez comme utiliser l'attribut [Authorize] pour protéger par mot de passe certaines pages de votre application MVC. Vous apprendrez comme utiliser l'Outil d'Administration de Site Web pour créer et gérer des utilisateurs et rôles. Vous apprendrez également comment configurer l'emplacement de stockage des comptes utilisateurs et des rôles.

- Titre : Authentification des utilisateurs via l'authentification par formulaire

- Auteur : Rémy Mainil (Traduction)

- Parution : 20 avril 2009

- Licence : Copyright ® 2009 Rémy Mainil. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Introduction

- Utiliser l'Outil d'Administration de Site Web

- Forcer l'identification

- Autoriser en fonction du nom d'utilisateur ou du rôle

- Configurer l'Authentification

- Configurer les autorisations de la base de données

- Conclusion

Traduction

Cet article est la traduction la plus fidèle possible de l'article original : Authenticating Users with Forms Authentication

Introduction

L'objectif de cet article est de vous expliquer comment utiliser l'authentification par formulaire pour protéger par mot de passe les Vues de vos applications ASP.NET MVC. Vous apprendrez à utiliser l'Outil d'Administration des Site Web pour créer les utilisateurs et les rôles. Vous apprendrez également à empêcher les utilisateurs non autorisés d'invoquer des actions du contrôleur. Pour finir, vous apprendrez comment configurer la façon dont les noms d'utilisateur et mots de passe sont stockés.

Utiliser l'Outil d'Administration de Site Web

Avant de faire quoi que ce soit d'autre, nous devons commencer par créer quelques utilisateurs et rôles. Le moyen le plus simple de créer de nouveaux utilisateurs et rôles est de tirer parti de l'Outil d'Administration de Site Web de Visual Studio 2008. Vous pouvez exécuter cet outil via le menu Projet, Configuration ASP.NET. Vous pouvez également lancer l'Outil d'Administration de Site Web en cliquant sur l'icone (un peu effrayante) du marteau qui frappe le monde située au dessus de l'Explorateur de Solutions (voir Figure 1).

Lancer l'Outil d'Administration de Site Web

Dans l'Outil d'Administration de Site Web, vous pouvez créer de nouveaux utilisateurs et rôles en choisissant l'onglet Securité. Cliquez sur le lien "Créer un utilisateur" pour créer un nouvel utilisateur prénommé Stephen (voir Figure 2). Attribuez à l'utilisateur Stephen le mot de passe de votre choix (par exemple, "secret").

Créer un nouvel utilisateur

Vous pourrez créer de nouveaux rôles premièrement en les activant, puis en les définissant. 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 les rôles" (voir Figure 3).

Créer un nouveau rôle

Finalement, créez un nouvel utilisateur nommé "Sally" et associez son compte avec le rôle d'Administrateur en cliquant sur le lien "Créer un utilisateur" et en sélectionnant le rôle "Administrateurs" lors de la création du compte "Sally" (voir Figure 4).

Ajouter un utilisateur à un rôle

Une fois tout ceci effectué, vous devriez avoir deux utilisateurs nommés Stephen et Sally respectivement. Vous devriez également avoir un rôle nommé "Administrateurs". Sally est membre du rôle Administrateurs tandis que Stephen non.

Forcer l'identification

Vous pouvez obliger un utilisateur à s'identifier avant qu'il ne puisse invoquer une action du contrôleur en ajoutant l'attribut [Authorize] à l'action. Vous pouvez appliquer l'attribut [Authorize] à une action en particulier ou sur l'entièreté du contrôleur. Par exemple, le contrôleur du Listing 1 expose une action nommée CompanySecrets(). Etant donné que cette action est préfixée de l'attribut [Authorize], elle ne peut être invoquée par un utilisateur non identifié.

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 invoquez l'action CompanySecrets() en entrant l'URL /Home/CompanySecrets dans la barre d'adresse de votre navigateur et que vous n'êtes pas identifié, vous serez automatiquement redirigé vers la vue Login (voir Figure 5).

La Vue Login

Vous pouvez utiliser le formulaire de la Vue Login pour entrer votre nom d'utilisateur et votre mot de passe. Si vous n'êtes pas un utilisateur enregistré, vous pouvez cliquer sur le lien "Register" (s'enregistrer) pour ouvrir la vue "Register" (voir Figure 6). Vous pouvez utiliser la vue "Register" pour créer un nouveau compte utilisateur.

La Vue Register

Une fois identifié, vous pouvez voir la vue "CompanySecrets" (voir Figure 7). Par défaut, vous serez identifié jusqu'à la fermeture de votre navigateur.

La Vue CompanySecrets

Autoriser en fonction du nom d'utilisateur ou du rôle

Vous pouvez utiliser l'attribut [Authorize] pour restreindre l'accès à une action d'un contrôleur pour un ensemble déterminé d'utilisateurs ou de rôles. Par exemple, le contrôleur modifié dans le Listing 2 contient deux nouvelles actions nommées StephenSecrets() et AdministratorSecrets().

Listing 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 = "Administrateurs")]
public ActionResult AdministratorSecrets()
{
return View();
}

}
}

Seul l'utilisateur Stephen pourra invoquer l'action StephenSecrets(). Tous les autres utilisateurs seront redirigés vers la vue Login. La propriété "Users" attend une liste de noms de comptes utilisateurs, séparés par des virgules.
Seuls les utilisateurs appartenant au rôle "Administrateurs" pourront invoquer l'action AdministratorSecrets(). Par exemple, du fait que Sally appartient au rôle "Administrateurs", elle pourra invoquer l'action "AdministratorSecrets(). Tous les autres utilisateurs seront redirigés vers la vue Login. La propriété "Roles" attend une liste de noms de rôles séparés par des virgules.

Configurer l'Authentification

A ce stade, vous vous demandez peut-être où sont stockés les comptes utilisateur et les rôles. Par défaut, l'information est stockée dans une base de données (RANU (1) )SQL Express nommée ASPNETDB.mdf, située dans le répertoire App_Data de votre application MVC. Cette base de données est générée automatiquement par le framework ASP.NET lorsque vous commencez à utiliser les rôles et utilisateurs.

Afin de voir la base de données ASPNETDB.mdf dans l'Explorateur de Solutions, vous devez d'abord sélectionner le menu Projet, Afficher tous les fichiers.
Utiliser la base de données SQL Express par défaut est pratique pendant le développement de l'application. La plupart du temps, cependant, vous ne voudrez pas utiliser la base de données ASPNETDB.mdf par défaut pour une application en production. Dans ce cas, vous pouvez modifier l'endroit où sont stockés les comptes utilisateur en exécutant ces deux étapes :

1. Ajouter les objets de base de données Application Services à votre base de données de production

2. Changer la chaîne de connexion de votre application pour pointer vers votre base de données de production

La première étape consiste à ajouter tous les objets de base de données (tables et procédures stockées) nécessaires dans votre base de données de production. Le moyen le plus simple d'effectuer cette étape est de tirer parti de l'Assistant installation de SQL Server pour ASP.NET (voir Figure 8). Vous pouvez démarrer cet assistant en ouvrant l'Invite de Commandes de Visual Studio 2008 depuis le menu Démarrer et en exécutant la commande suivante : aspnet_regsql.

Assistant installation de SQL Server pour ASP.NET

L'assistant installation SQL Server pour ASP.NET 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 nécessaires pour les services d'application ASP.NET. Le serveur de base de données ne doit pas obligatoirement être situé sur votre machine.

Si vous ne voulez pas utiliser l'assistant installation SQL Server pour ASP.NET, vous trouverez les scrits nécessaires pour l'ajout des objets de la base de données des services d'application dans le répertoire 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 à la base de données utilisée par votre application MVC. Modifiez la chaîne de connexion ApplicationServices dans le fichier de configuration de votre application (web.config) de sorte qu'elle pointe vers la base de données de production. Par exemple, la chaîne de connexion modifiée du Listing 3 pointe vers une base de données nommée MyProductionDB (la chaîne de connexion ApplicationServices originale a été commentée).

Listing 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>

Configurer les autorisations de la base de données

Si vous utilisez la sécurité intégrée pour vous connecter à votre base de données, vous devrez ajouter le compte utilisateur Windows correct comme identifiant de connexion à votre base de données. Le compte correct dépend du fait que vous utilisiez le serveur de développement ASP.NET ou Internet Information Services (IIS) comme serveur Web. Le compte utilisateur correct dépend également de votre système d'exploitation.

Si vous utilisez le serveur de développement ASP.NET (le serveur web utilisé par défaut par Visual Studio), votre application s'exécute dans le contexte de votre compte utilisateur Windows. Dans ce cas, vous devez ajouter votre compte utilisateur Windows comme identifiant pour votre base de données.

Toutefois, si vous utilisez Internet Information Services, vous devez soit ajouter le compte ASPNET ou le compte NT AUTHORITY/NETWORK SERVICE comme identifiant pour votre base de données. Si vous utilisez Windows XP, ajoutez le compte ASPNET comme identifiant pour 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 identifiant pour la base de données.

Vous pouvez ajouter un nouveau compte utilisateur en utilisant Microsoft SQL Server Management Studio (voir Figure 9).

Créer une nouvelle connexion SQL Server

Après avoir créé l'identifiant de connexion nécessaire, vous devez attribuer l'identifiant à un utilisateur d'une base de données avec les bon rôles. Double-cliquez sur la connexion et choisissez l'onglet Mappage de l'utilisateur.
Choisissez un ou plusieurs roles. Par exemple, de façon à pouvoir identifier les utilisateurs, vous devez activer le rôle aspnet_Membership_BasicAccess. Pour pouvoir créer de nouveaux utilisateurs, vous devez activer le rôle aspnet_Membership_FullAccess (voir Figure 10).

Ajouter des rôles de base de données

Conclusion

Dans cet article, vous avez appris à utiliser l'authentification par formulaires lors de la création d'une application ASP.NET MVC. Pour commencer, vous avez apris à créer des utilisateurs et des rôles en tirant partit de l'Outil d'administration de site Web. Ensuite, vous avez appris à utiliser l'attribut [Authorize] pour empêcher des utilisateurs non autorisés d'invoquer certaines actions des contrôleurs. Pour finir, vous avez appris à configurer votre application MVC pour stocker les utilisateurs et rôles dans une base de données de production.

(1) NdT : Run As Normal User - Exécuter en tant qu'utilisateur normal.