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
- Paramètres de configuration associés
- Authentification
- Autorisation
- Sécurité basée sur les rôles
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 :
- Un client demande une page .aspx qui réside sur un serveur IIS.
- Les informations d’identification du client sont passées à IIS.
- IIS authentifie le client et transfère le jeton authentifié ainsi que la demande du client au processus de travail ASP.NET.
- 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.
Paramètres de configuration associés
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
- Authentification Windows
- Authentification de passeport
- Authentification par défaut
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.
FileAuthorizationModule
est 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 :
Pour plus d’informations, consultez le ou les livres suivants :
PRB : Request.ServerVariables(« LOGON_USER ») retourne une chaîne vide dans ASP.NET
Reilly, Douglas J. Conception d’applications ASP.NET Microsoft. Microsoft Press, 2001.
Esposito, Dino. Création de solutions web avec ASP.NET et ADO.NET. Microsoft Press, 2001.