![]() |
![]() |
![]() |
Les articles de ESSI# - Identification par formulaire ASP.NET |
RACINE | |
![]() |
Cliquez ici pour obtenir les sources de l'application Web. |

|
Je rappellerai que les formulaires se basent sur un mécanisme simple : vous (client) possédez un cookie (petit fichier texte) dans lequel est déposé un login/password (rempli par la page de login justement). A chaque accès aux pages de l'application (répertoire), ASP.NET vérifie que vous possédez bien un tel cookie, et que les informations contenues sont valides (bien formées, et vous êtes quelqu'un d'autorisé). Si vous n'êtes pas accrédité, vous êtes automatiquement redirigé vers la page d'identification. En cas d'identification réussie, vous serez renvoyés vers la page que vous demandiez à l'origine. |
Je prends pour pré-requis que mon lecteur a un niveau même faible en C# (voir de Java au vues de ressemblances syntaxiques), mais possède des connaissances ASP ou ASP.NET (voir de la pratique).| Si vous voyez ceci ... | ...ça veut dire cela. |
| IDisposable Interface | C'est un lien vers une page d'aide du .NET Framework SDK. Ce lien ne fonctionnera que si le .NET framework SDK ANGLAIS est installé sur votre poste courant. Si vous avez la version française, modifiez les liens comme suit : ms-help://MS.NETFrameworkSDK/... en ms-help://MS.NETFrameworkSDK.Fr/... Ok, c'est pas forcément une bonne idée de Microsoft, mais c'est ainsi ... :( |
--> téléchargez le source |
C'est un lien vers un fichier téléchargeable hosté sur le même site. |
![]() |
Cliquez ici pour obtenir les sources de l'application Web. |
\ login.aspx --> La page Login/Password login.aspx.cs default.aspx --> Une des pages à protéger default.aspx.cs web.config --> Le fichier de configuration de l'application bin\ formsauth.dll --> La DLL contenant le projetSachez que vous ne protégez pas qu'une page avec cette méthode : vous protégez toutes les pages présentes dans le répertoire. C'est grâce au fichier web.config que ASP.NET prends en compte à chaque accès de page. Il vérifie (notamment) que les restrictions de sécurités que vous exigez sont mises en place. Ainsi, dans notre cas, tout accès à default.aspx par une personne non enregistrée se soldera par une redirection vers la page de login. Et si l'étape de login est validée, alors la page demandée à l'origine s'affichera (donc default.aspx).
<configuration>
<system.web>
...
<authentication mode="Forms">
<forms name=".BLADEUPLOADCOOKIE" loginUrl="login.aspx" protection="All"
timeout="20">
<credentials passwordFormat = "SHA1">
<user name="test" password="A94A8FE5CCB19BA61C4C0873D391E987982FBBD3" />
<user name="toto" password="0B9C2625DC21EF05F6AD4DDF47C5F203837AA32C" />
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
</configuration>
| attribut | utilité |
| name | le nom du cookie. ATTENTION ! Celui-ci doit être unique (sinon, risque de collision avec le cookie du voisin) |
| loginUrl | le nom de la page qui jouera le rôle d'identification. Typiquement, "login.aspx". |
| protection | La valeur "All" indique que le cookie sera protégé au maximum (encryption + validation) |
| timeout | la durée de vie en minutes du cookie. Si aucune activitée n'est détectée pendant cette période, le cookie est détruit. Sinon, sa durée de vie est prolongée d'autant. |
user qui font correspondre un identifieur (name) en clair à une valeur de hashage correspondant au mot de passe de l'utilisateur (password).
: pour générer une valeur de hashage correspondant à un mot de passe (string) voulu, utilisez :
hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile (
le-mot-de-passe,
algo-hashage);
Avec le-mot-de-passe qui vaut évidement votre mot de passe secret et algo-hashage qui vaut "sha1" ou "md5" suivant vos choix ...Plus d'info dans l'aide .NET : FormsAuthentication.HashPasswordForStoringInConfigFile Method |
<deny users="?" /> signifie que tout les utilisateurs anonymes seront refusés.
1: private void Button1_Click(object sender, System.EventArgs e) {
2: if (FormsAuthentication.Authenticate(tboxLogin.Text, tboxPassword.Text)){
3: FormsAuthentication.RedirectFromLoginPage(tboxLogin.Text, false);
4: }
5: else {
6: //message d'erreur et compagnie
7: lblLoginInvalide.Visible = true;
8: }
9: }
Authenticate) : vous demandez à ASP.NET si ce login (tboxLogin.Text) et le password correspondant (tboxPassword.Text) sont connus et authorisés à passer la phase d'identification.RedirectFromLoginPage) : login ok, vous demandez à être redirigé vers la page qui a demandé l'identification (ou default.aspx si aucune). Vous passez en paramètres (dans l'ordre) le username (pas obligatoirement le même que celui de l'identification) et si le cookie doit être persistant entre les sessions.
Un exemple de page de login
private void Button1_Click(object sender, System.EventArgs e) {
FormsAuthentication.SignOut();
Response.Redirect ("login.aspx");
}
Dans la première, on renonce de manière impérative à nos droits acquis par la phase de login (destruction du cookie) et par la deuxième, on va voir ailleurs (la redirection vers la page de login est facultative).csc /out:bin\monprojet.dll /t:library *.csS'il n'y a pas d'erreur, vous devriez être sur le bon chemin. Testez vite votre application !!!
!!
Designing Microsoft ASP.NET Applications (cher) ISBN : 0-7356-1348-6 chez MSPresspar Alain Vizzini (vizzini@essi.fr
)
pour l'ESSI & Microsoft, création 02-03-2003, dernière màj 02-03-2003