vue d’ensemble de la sécurité ASP.NET

Cet article fournit une introduction à la sécurité ASP.NET, il fait référence aux espaces de noms de bibliothèque de classes Microsoft .NET Framework suivants :

  • System.Web.Security
  • System.Web.Principal

              Version d’origine du produit : ASP.NET
Numéro de la base de connaissances d’origine : 306590

Résumé

ASP.NET vous permet de mieux contrôler l’implémentation de la sécurité pour votre application. ASP.NET sécurité fonctionne conjointement avec la sécurité IIS (Internet Information Services) et inclut des services d’authentification et d’autorisation pour implémenter le modèle de sécurité ASP.NET. ASP.NET inclut également une fonctionnalité de sécurité basée sur les rôles que vous pouvez implémenter pour les comptes d’utilisateur Windows et non-Windows.

Cet article est divisé en sections suivantes :

Flux de sécurité avec une requête

Les étapes suivantes décrivent la séquence d’événements lorsqu’un client effectue une requête :

  1. Un client demande une page .aspx qui réside sur un serveur IIS.
  2. Les informations d’identification du client sont passées à IIS.
  3. IIS authentifie le client et transfère le jeton authentifié ainsi que la demande du client au processus de travail ASP.NET.
  4. En fonction du jeton authentifié d’IIS et des paramètres de configuration de l’application web, ASP.NET décide s’il faut emprunter l’identité d’un utilisateur sur le thread qui traite la demande. Dans une différence distincte entre ASP (Active Server Pages) et ASP.NET, ASP.NET n’emprunte plus l’identité de l’utilisateur authentifié par défaut. Pour activer l’emprunt d’identité, vous devez définir l’attribut impersonate de la section identity dans le fichier Web.config sur true.

Pour plus d’informations sur le flux de sécurité, consultez ASP.NET Data Flow.

Pour plus d’informations sur l’emprunt d’identité dans ASP.NET, consultez Comment implémenter l’emprunt d’identité dans une application ASP.NET.

IIS gère les paramètres de configuration liés à la sécurité dans la métabase IIS. Toutefois, ASP.NET conserve les paramètres de configuration de sécurité (et autres) dans les fichiers de configuration XML (Extensible Markup Language). Bien que cela simplifie généralement le déploiement de votre application du point de vue de la sécurité, le modèle de sécurité adopté par votre application nécessite la configuration correcte de la métabase IIS et de votre application ASP.NET via son fichier de configuration (Web.config).

Les sections de configuration suivantes sont liées à ASP.NET sécurité :

Authentification

L’authentification est le processus par lequel vous obtenez des informations d’identification telles que le nom et le mot de passe de l’utilisateur, et vous validez ces informations d’identification par rapport à une autorité.

ASP.NET fournit quatre fournisseurs d’authentification :

Authentification par formulaires

L’authentification par formulaire fait référence à un système dans lequel les demandes non authentifiées sont redirigées vers un formulaire HTML (Hypertext Markup Language) dans lequel les utilisateurs tapent leurs informations d’identification. Une fois que l’utilisateur a fourni des informations d’identification et envoyé le formulaire, l’application authentifie la demande et le système émet un ticket d’autorisation sous la forme d’un cookie. Ce cookie contient les informations d’identification ou une clé pour réacquire l’identité. Les requêtes suivantes du navigateur incluent automatiquement le cookie.

Pour plus d’informations sur l’authentification par formulaire, consultez Le fournisseur d’authentification par formulaire.

Pour plus d’informations Sur l’authentification par formulaire dans ASP.NET, consultez Comment implémenter l’authentification Forms-Based dans votre application ASP.NET à l’aide de C#.NET.

Authentification Windows

Dans Authentification Windows, IIS effectue l’authentification et le jeton authentifié est transféré au processus de travail ASP.NET. L’avantage de l’utilisation de Authentification Windows est qu’elle nécessite un minimum de codage. Vous pouvez utiliser Authentification Windows pour emprunter l’identité du compte d’utilisateur Windows qu’IIS authentifie avant de transmettre la demande à ASP.NET.

Pour plus d’informations sur Authentification Windows, consultez Le fournisseur WindowsAuthenticationModule.

Authentification de passeport

L’authentification Passport est un service d’authentification centralisé, fourni par Microsoft, qui offre une authentification unique et des services de profil de base pour les sites membres. En règle générale, l’authentification Passport est utilisée lorsque vous avez besoin d’une fonctionnalité d’authentification unique sur plusieurs domaines.

Pour plus d’informations sur l’authentification Passport, consultez Le fournisseur d’authentification Passport.

Authentification par défaut

L’authentification par défaut est utilisée lorsque vous ne souhaitez pas de sécurité sur votre application web . un accès anonyme est requis pour ce fournisseur de sécurité. Parmi tous les fournisseurs d’authentification, l’authentification par défaut fournit des performances maximales pour votre application. Ce fournisseur d’authentification est également utilisé lorsque vous utilisez votre propre module de sécurité personnalisé.

Autorisation

L’autorisation est le processus qui vérifie si l’utilisateur authentifié a accès aux ressources demandées.

ASP.NET propose les fournisseurs d’autorisation suivants :

Autorisation de fichier

La FileAuthorizationModule classe effectue l’autorisation de fichier et est active lorsque vous utilisez Authentification Windows. FileAuthorizationModuleest chargé d’effectuer des vérifications sur les Access Control Listes Windows (ACL) pour déterminer si un utilisateur doit avoir accès.

Autorisation d’URL

La UrlAuthorizationModule classe effectue l’autorisation URL (Uniform Resource Locator), qui contrôle l’autorisation en fonction de l’espace de noms URI (Uniform Resource Identifier). Les espaces de noms d’URI peuvent être différents des chemins d’accès aux dossiers physiques et aux fichiers utilisés par les autorisations NTFS.

UrlAuthorizationModule implémente des assertions d’autorisation positives et négatives ; autrement dit, vous pouvez utiliser le module pour autoriser ou refuser de manière sélective l’accès à des parties arbitraires de l’espace de noms d’URI pour les utilisateurs, les rôles (tels que le gestionnaire, les testeurs et les administrateurs) et les verbes (tels que GET et POST).

Pour plus d’informations sur l’autorisation dans ASP.NET, consultez autorisation ASP.NET.

Sécurité basée sur les rôles

La sécurité basée sur les rôles dans ASP.NET est similaire à la sécurité basée sur les rôles utilisée par Microsoft COM+ et Microsoft Transaction Server (MTS), bien qu’il existe des différences importantes. La sécurité basée sur les rôles dans ASP.NET n’est pas limitée aux comptes et groupes Windows. Par exemple, si Authentification Windows et l’emprunt d’identité sont activés, l’identité de l’utilisateur est une identité Windows (User.Identity.Name = "Domain\username"). Vous pouvez case activée identités pour l’appartenance à des rôles spécifiques et restreindre l’accès en conséquence. Par exemple :

Code Visual Basic .NET

If User.IsInRole("BUILTIN\Administrators") Then
    Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
    Response.Write("You are a User")
Else
    Response.Write("Invalid user")
End if

Code Visual C# .NET

if ( User.IsInRole("BUILTIN\\Administrators"))
    Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
    Response.Write("You are a User");
else
    Response.Write("Invalid user");

Si vous utilisez l’authentification par formulaire, les rôles ne sont pas attribués à l’utilisateur authentifié ; vous devez le faire par programmation. Pour attribuer des rôles à l’utilisateur authentifié, utilisez l’événement OnAuthenticate du module d’authentification (qui est le module d’authentification par formulaire dans cet exemple) pour créer un GenericPrincipal objet et l’affecter à la propriété User du HttpContext. Le code suivant illustre ceci :

Code Visual Basic .NET

Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
    If (Not(HttpContext.Current.User Is Nothing)) Then
        If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
            Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
            Dim myRoles(3) As String
            myRoles(0)= "managers"
            myRoles(1)= "testers"
            myRoles(2)= "developers"
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
        End If
    End If
End Sub

Code Visual C# .NET

public void Application_AuthenticateRequest(Object s, EventArgs e)
{
    if (HttpContext.Current.User != null)
     {
         if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
         {
             System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
             String[] myRoles = new String[3];
             myRoles[0]= "managers";
             myRoles[1]= "testers";
             myRoles[2]= "developers";
             HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
         }
    }
}

Pour case activée si l’utilisateur a un rôle spécifique et restreindre l’accès en conséquence, utilisez le code suivant (ou similaire) dans vos pages .aspx :

Code Visual Basic .NET

If User.IsInRole("managers") Then
    Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
    Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
    Response.Write("You are a Developer")
End if

Code Visual C# .NET

if (User.IsInRole("managers"))
    Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
    Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
    Response.Write("You are a Developer");

Pour plus d’informations sur la sécurité basée sur les rôles, consultez Sécurité basée sur les rôles.

References

Pour obtenir des informations plus générales sur ASP.NET, reportez-vous au groupe de discussion suivant :

ASP.NET groupe de discussion

Pour plus d’informations, consultez le ou les livres suivants :