Asp.NET MVC - Authentification des utilisateurs via l'authentification Windows

Rémy Mainil (Traduction)

Apprenez comment utiliser l'authentification Windows dans le cadre d'une application MVC. Vous apprendrez comment activer l'authentification Windows dans le web.config de votre application ainsi que comment configurer l'authentification avec IIS. Pour finir, vous apprendrez comment utiliser l'attribut [Authorize] pour restreindre l'accès aux actions du contrôleur à certains utilisateurs ou groupes d'utilisateurs Windows.

- Titre : Asp.NET MVC - Authentification des utilisateurs via l'authentification Windows

- Auteur : Rémy Mainil (Traduction)

- Parution : 26 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

- Activer l'Authentification Windows

- Autoriser les utilisateurs et groupes Windows

- Conclusion

Traduction

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

Introduction

L'objectif de cet article est de vous expliquer comment tirer parti des fonctionnalités de sécurité intégrées dans IIS pour protéger par mot de passe les vues de vos applications MVC. Vous apprendrez comment n'autoriser des actions du contrôleur qu'à être exécutées par certains utilisateurs Windows particuliers ou par des utilisateurs appartenant à certains groupes Windows particuliers. Utiliser l'authentification Windows prend tout son sens lorsque vous créez un site interne à votre société (un site intranet) et que vous souhaitez que vos utilisateurs soient capables d'utiliser leurs nom d'utilisateur et mot de passe Windows habituels pour accéder à votre application. Si vous construisez un site externe (un site Internet), utilisez plutôt l'authentification par formulaires.

Activer l'Authentification Windows

Quand vous créez une nouvelle application ASP.NET MVC, l'authentification Windows est désactivée par défaut. L'authentification par formulaire et le mode d'authentification activé par défaut pour les application MVC. Vous devez activer l'authentification Windows en modifiant le web.config de votre application MVC. Trouvez la section <authentication> et modifiez la comme suit afin d'utiliser l'authentification Windows plutôt que l'authentification par formulaire.

<authentication mode="Windows">

</authentication>

Quand vous activez l'authentification Windows, votre serveur web devient responsable de l'identification des utilisateurs. Typiquement, il y a deux différents types de serveurs web que vous utilisez lorsque vous créez et déployez une application ASP.NET MVC. Premièrement, pendant le développement de l'application MVC, vous utilisez le serveur de développement ASP.NET inclus dans Visual Studio (NdT : Cassini). Par défaut, le serveur de développement ASP.NET exécute toutes les pages dans le contexte du compte Windows de l'utilisateur connecté (peut importe le compte que vous utilisez pour vous connecter). Le serveur de développement ASP.NET supporte également l'authentification NTLM. Vous pouvez activer l'authentification NTLM via un clic droit sur le nom de votre projet dans l'explorateur de solutions puis propriétés. Ensuite, choisissez l'onglet Web et cochez la case Authentification NTLM (voir Figure 1).

Figure 1 - Activer l'authentification NTLM pour le serveur de développement ASP.NET

Pour une application web en production, vous utilisez IIS comme serveur web. IIS supporte de nombreux modes d'authentification dont notamment :

- Authentification de base - Définie comme partie intégrante du protocol HTTP 1.0. Envoi du nom d'utilisateur et du mot de passe en texte clair (encodé en Base64) à traver Internet.

- Authentification Digest - Envoi un hachage du mot de passe, plutôt que le mot de passe lui-même, à travers Internet

- Authentification Windows intégrée (NTLM) - Le meilleur mode d'authentification à utiliser dans un environnement Intranet Windows

- Authentification par certificat - Autorise l'authentification via un certificat client. Le certificat correspond à un compte utilisateur Windows

Pour un aperçu plus détaillé de ces différents modes d'authentification, lisez http://msdn.microsoft.com/fr-fr/library/aa292114(VS.71).aspx.

Vous pouvez utiliser le Gestionnaire des services Internet (IIS) pour activer un type particulier d'authentification. Soyez attentifs au fait que tous les types d'authentification ne sont pas disponibles pour tous les systèmes d'exploitation. De plus, si vous utilisez IIS 7.0 avec Windows Vista, vous devrez activer les différents types d'authentification Windows avant qu'ils ne soient visibles dans le Gestionnaire de services Internet. Ouvrez le panneau de configuration, Programmes et Fonctionnalités, Activer ou désactiver des fonctionnalités de Windows et vérifiez l'élément Internet Information Service (voir Figure 2).

Figure 2 - Activer les fonctionnalités IIS de Windows

Si vous utilisez IIS, vous pouvez activer ou désactiver les différents types d'authentification. Par exemple, la Figure 3 illustre la désactivation de l'authentification anonyme et l'activation de l'authentification Windows Intégrée (NTLM) en utilisant IIS 7.0.

Figure 3 - Activer l'authentification Windows intégrée.

Autoriser les utilisateurs et groupes Windows

Après avoir activé l'authentification Windows intégrée, vous pouvez utiliser l'attribut [Authorize] pour contrôler l'accès aux contrôleurs ou aux actions du contrôleur. Cet attribut peut être appliqué à un contrôleur MVC dans son intégralité ou à une action particulière du contrôleur.

Par exemple, le contrôleur Home du Listing 1 expose trois actions nommées Index(), CompanySecrets(), et StephenSecrets(). N'importe qui peut invoquer l'action Index(). Cependant, seuls les membres du groupe Windows des Administrateurs locaux pourront invoquer l'action CompanySecrets(). Enfin, seul l'utilisateur Windows Stephen (du domaine Redmond) pourra invoquer l'action StephenSecrets().

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(Roles = "Managers")]
public ActionResult CompanySecrets()
{
return View();
}

[Authorize(Users="redmond\\swalther")]
public ActionResult StephenSecrets()
{
return View();
}
}
}

Du fait du User Account Control (UAC), lorsque vous travaillez avec Windows Vista ou Windows Server 2008, le groupe des Administrateurs locaux se comporte différemment des autres groupes. L'attribut [Authorize] ne reconnaitra pas correctement un membre du groupe des Administrateurs locaux excepté si vous modifiez les paramètres de l'UAC de votre ordinateur.

Ce qui arrive exactement lorsque vous tentez d'invoquer une action du contrôleur sans avoir les bonnes autorisations dépend du type d'authentification activé. Par défaut, lorsque vous utilisez le serveur de développement ASP.NET, vous obtenez simplement une page blanche. Cette page est envoyée avec un code 401 Not Authorized. Si, par contre, vous utilisez IIS avec l'authentification anonyme désactivée et l'authentification de base activée, vous recevrez une boite de dialogue d'identification à chaque fois que vous ouvrirez la page protégée (voir Figure 4).

Figure 4 - Boîte de dialogue : Authentification de base

Conclusion

Cet article vous a appris comment utiliser l'authentification Windows intégrée dans le cadre d'une application ASP.NET MVC. Vous avez appris comment activer l'authentification Windows dans le fichier web.config de votre application et comment configurer l'authentification dans IIS. Pour finir, vous avez appris à utiliser l'attribut [Authorize] pour restreindre l'accès aux actions du contrôleur à des utilisateurs et groupes Windows particuliers.