A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
Ancien nº de publication de cet article : F301240
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Configuration des paramètres de sécurité dans le fichier Web.config
Cette section démontre comment ajouter et modifier les sections de configuration <authentication> et <authorization> pour configurer l'application ASP.NET de façon à utiliser l'authentication basée sur les formulaires.
Dans l'Explorateur de solutions, ouvrez le fichier Web.config.
Sélectionnez le mode d'authentification Formulaires.
Insérez la balise <Forms> et remplissez les attributs appropriés. (Pour plus d'informations sur ces attributs, reportez-vous à la documentation MSDN ou Démarrage rapide répertoriée dans la section RÉFÉRENCES.) Copiez le code suivant, puis cliquez sur Coller au format HTML dans le menu Edition pour coller le code dans la section <authentication> du fichier :
Création d'un exemple de table de base de données pour stocker les détails des utilisateurs
Cette section démontre comment créer un exemple de base de données pour stocker le nom d'utilisateur, le mot de passe et le rôle des utilisateurs. Vous devez spécifier la colonne de rôle si vous souhaitez stocker des rôles d'utilisateurs dans la base de données et implémenter la sécurité basée sur les rôles.
Dans le menu Démarrer, cliquez sur Exécuter, puis tapez notepad pour ouvrir le Bloc-notes.
Sélectionnez le code de script SQL suivant, cliquez avec le bouton droit sur le code, puis cliquez sur Copier. Dans le Bloc-notes, cliquez sur Coller dans le menu Edition pour coller le code suivant :
if exists (select * from sysobjects where id =
object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Users]
GO
CREATE TABLE [dbo].[Users] (
[uname] [varchar] (15) NOT NULL ,
[Pwd] [varchar] (25) NOT NULL ,
[userRole] [varchar] (25) NOT NULL ,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] WITH NOCHECK ADD
CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED
(
[uname]
) ON [PRIMARY]
GO
INSERT INTO Users values('user1','user1','Manager')
INSERT INTO Users values('user2','user2','Admin')
INSERT INTO Users values('user3','user3','User')
GO
Enregistrez le fichier sous Users.sql.
Sur l'ordinateur Microsoft SQL Server, ouvrez Users.sql dans l'Analyseur de requêtes. Dans la liste de bases de données, cliquez sur pubs et exécutez le script. Cette action crée un exemple de table d'utilisateurs et remplit la table de la base de données Pubs à utiliser avec cet exemple d'application.
Ce Web Form est utilisé pour présenter un formulaire d'ouverture de session aux utilisateurs de sorte qu'ils puissent fournir leur nom d'utilisateur et leur mot de passe afin de se connecter à l'application.
Basculez en mode Création, puis enregistrez la page.
Écriture du code du gestionnaire d'événements de sorte qu'il valide les informations d'identification des utilisateurs
Cette section contient le code qui est placé dans la page code-behind (Logon.aspx.cs).
Double-cliquez sur Logon pour ouvrir le fichier Logon.aspx.cs.
Importez les espaces de noms requis dans le fichier code-behind :
using System.Data.SqlClient;
using System.Web.Security;
Créez une fonction ValidateUser pour valider les informations d'identification des utilisateurs en consultant la base de données. (Assurez-vous de modifier la chaîne de connexion de sorte qu'elle pointe vers votre base de données.)
private bool ValidateUser( string userName, string passWord )
{
SqlConnection conn;
SqlCommand cmd;
string lookupPassword = null;
// Vérifie la présence de userName non valide.
// userName ne doit pas être nul et doit comprendre entre 1 et 15 caractères.
if ( ( null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
return false;
}
// Vérifie la présence de passWord non valide.
// passWord ne doit pas être nul et doit comprendre entre 1 et 25 caractères.
if ( ( null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
{
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
return false;
}
try
{
// Contactez votre administrateur SQL Server afin d'obtenir une chaîne de connexion
// appropriée à utiliser pour la connexion à votre serveur SQL local.
conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
conn.Open();
// Crée SqlCommand pour sélectionner le champ pwd dans la table d'utilisateurs étant donné le userName fourni.
cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
cmd.Parameters["@userName"].Value = userName;
// Exécute la commande et récupère le champ pwd dans la chaîne lookupPassword.
lookupPassword = (string) cmd.ExecuteScalar();
// Nettoie la commande et les objets de connexion.
cmd.Dispose();
conn.Dispose();
}
catch ( Exception ex )
{
// Ajoute ici la gestion des erreurs pour le débogage.
// Ce message d'erreur ne doit pas être renvoyé à l'appelant.
System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
}
// Si aucun mot de passe n'est trouvé, retourne false.
if ( null == lookupPassword )
{
// Vous pouvez écrire ici les échecs de tentative de connexion dans le journal des événements, pour une sécurité accrue.
return false;
}
// Compare lookupPassword et le passWord d'entrée à l'aide d'une comparaison sensible à la casse.
return ( 0 == string.Compare( lookupPassword, passWord, false ) );
}
Deux méthodes peuvent être appliquées pour générer le cookie d'authentification basée sur les formulaires et rediriger l'utilisateur vers une page appropriée dans l'événement cmdLogin_ServerClick. Un exemple de code est fourni pour les deux scénarios. Appliquez l'une des deux méthodes, selon vos exigences.
Appelez la méthode RedirectFromLoginPage pour générer automatiquement le cookie d'authentification basée sur les formulaires et rediriger l'utilisateur vers une page appropriée dans l'événement cmdLogin_ServerClick :
Générez le ticket d'authentification, chiffrez-le, créez un cookie, ajoutez-le à la séquence, puis redirigez l'utilisateur. Cette méthode procure un contrôle accru sur la création du cookie. Dans ce cas, vous pouvez également inclure des données personnalisées avec FormsAuthenticationTicket.
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("logon.aspx", true);
}
Assurez-vous que le code suivant est ajouté à la méthode InitializeComponent dans le code généré par le Concepteur Web Form :
this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
Cette section montre comment créer une page de test vers laquelle les utilisateurs sont redirigés après l'authentification. Si les utilisateurs accèdent à cette page sans d'abord se connecter à l'application, ils sont redirigés vers la page d'ouverture de session.
Renommez la page WebForm1.aspx existante en Default.aspx, puis ouvrez-la dans l'éditeur.
Basculez en mode HTML et copiez le code suivant entre les balises <form> :
Cette bouton permet de fermer la session d'authentification basée sur les formulaires.
Basculez en mode Création, puis enregistrez la page.
Importez les espaces de noms requis dans le fichier code-behind :
using System.Web.Security;
Double-cliquez sur SignOut pour ouvrir la page code-behind (Default.aspx.cs), puis copiez le code suivant dans le gestionnaire d'événements cmdSignOut_ServerClick :
Vous souhaiterez peut-être stocker les mots de passe de manière sécurisée dans une base de données. Vous pouvez utiliser la fonction utilitaire de classe FormsAuthentication nommée HashPasswordForStoringInConfigFile pour chiffrer les mots de passe avant de les stocker dans la base de données ou dans le fichier de configuration.
Vous souhaiterez peut-être stocker les informations de connexion SQL dans le fichier de configuration (Web.config) de manière à pouvoir les modifier facilement si nécessaire.
Vous pourriez ajouter du code afin d'empêcher les pirates informatiques qui essaient différentes combinaisons de mots de passe de se connecter. Par exemple, vous pouvez inclure une logique qui accepte uniquement deux ou trois tentatives de connexion. Si l'utilisateur ne peut se connecter après un certain nombre de tentatives, il peut être utile de définir un indicateur dans la base de données afin d'interdire à cet utilisateur de se connecter tant qu'il n'a pas réactivé son compte en accédant à une page différente ou en appelant le bureau d'assistance. En outre, vous devez ajouter une gestion des erreurs appropriée le cas échéant.
L'utilisateur étant identifié d'après le cookie d'authentification, vous souhaiterez peut-être utiliser le protocole SSL (Secure Sockets Layer) sur cette application de sorte que personne ne puisse intercepter le cookie d'authentification ni toute autre information sensible transmise.
L'authentification basée sur les formulaires exige que votre client accepte ou active les cookies dans son navigateur.
Le paramètre timeout de la section <authentication> contrôle l'intervalle de regénération du cookie d'authentification. Vous pouvez sélectionner une valeur qui optimise la sécurité et les performances.
Certains caches et proxy intermédiaires sur Internet peuvent mettre en cache les réponses de serveur Web qui contiennent des en-têtes Set-Cookie, qui sont ensuite retournées à un utilisateur différent. L'authentification basée sur les formulaires utilisant un cookie pour authentifier les utilisateurs, cela peut permettre à un utilisateur d'emprunter l'identité (accidentellement ou intentionnellement) d'un autre utilisateur en recevant de la part d'un cache ou d'un proxy intermédiaire un cookie qui ne lui était pas destiné initialement.
Pour plus d'informations sur la façon d'implémenter l'authentification simple basée sur les formulaires qui utilise la section <credentials> pour stocker des utilisateurs et des mots de passe, reportez-vous à l'exemple de Démarrage rapide ASP.NET GotDotNet suivant :
Pour plus d'informations sur la façon d'implémenter l'authentification basée sur les formulaires qui utilise un fichier XML pour stocker des utilisateurs et des mots de passe, reportez-vous à la rubrique suivante dans la documentation du Kit de développement SDK .NET Framework :
Pour plus d'informations sur la sécurité des applications Web ASP.NET, reportez-vous à la documentation du Guide de développement Microsoft .NET Framework suivante :
Pour plus d'informations sur l'espace de noms System.Web.Security, reportez-vous à la documentation de référence du Microsoft .NET Framework suivante :
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Envoyez-nous vos commentaires sur les informations de cette page
Ces informations vous ont-elles aidé à résoudre votre problème ?
Oui
Non
Je ne sais pas
Ces informations étaient-elles pertinentes ?
Oui
Non
Quel niveau d'effort avez-vous dû personnellement fournir pour utiliser cet article ?
Mineur
Peu important
Modéré
Important
Très important
Que pourrions-nous faire pour améliorer ces informations ?
Attention : Veuillez ne pas indiquer vos coordonnées personnelles (adresse email ou numéro de téléphone) dans vos commentaires ci-dessous.
Merci ! Vos commentaires sont très utiles pour l'amélioration de notre contenu d'aide et de support. Si vous avez besoin d'aide complémentaire, veuillez consulter la page d'accueil d'aide et support.