ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 1 ScurIt ASP.NET 2.0 : I'authentIfIcatIon par formuIaIre Cet artIcle a t ralIs partIr de la 8eta 1 de 7Isual StudIo 2005. l a pour but de vous InItIer quelques nouveauts d'ASP.NET 2.0. 1. FaIre tourner son projet sous S Un nouveau serveur Web pour le dveloppeur En lanant notre premIer projet Web, nous avons la surprIse de dcouvrIr que notre sIte ne se lance pas sous S maIs sous un serveur ddI au dveloppeur.
PourquoI pas : Apres tout, pourquoI lancer la grosse artIllerIe (S) quand un petIt serveur web suffIt. A vraI dIre, le dploIement fInal sous S se faIt sans probleme mme sI on a travaIll sous 7Isual Web 0evelopper Web Server .
|aIs, voyons comment repasser sous S car j'aI mes habItudes. FaIre fonctIonner votre projet sous S Cela se faIt relatIvement facIlement. L'IllustratIon suIvante montre comment faIre :
Et maIntenant, le lancement de notre sIte vIa 7Isual StudIo se faIt bIen sous S. .NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 2 2. |Ise en place d'une authentIfIcatIon par formulaIre 0es nouveaux composants dIsponIbles ASP.NET 2.0 fournIt un grand nombre de nouveaux controles et de composants. Toujours dans le but de nous proposer en standard des fonctIonnalIts nouvelles et nous faIre gagner du temps.
Nous allons maIntenant restreIndre l'acces notre sIte. Toute personne se plaant sous le rpertoIre admIn devra ncessaIrement s'IdentIfIer. Nous allons dfInIr une page logIn.aspx quI permettra de s'authentIfIer. La bote outIls nous propose des nouveaux composants relatIfs l'authentIfIcatIon, notamment le composant LogIn .
Nous allons nous en servIr. Nous pouvons remarquer un smart tag sur le composant quI permet de personnalIser celuIcI. Nous allons clIquer sur admInIstrate WebsIte .
Nous parvenons alors sur un sIte d'admInIstratIon quI va nous permettre de paramtrer notre applIcatIon web. Nous pouvons aussI accder ce sIte vIa le menu ASP.NET confIguratIon de 7Isual StudIo : .NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 J
Les ProvIders (|emberShIpProvIder)
Nous obtenons une page avec un certaIn nombre d'onglets. Et nous allons nous attarder fournIr un provIder notre composant LogIn quI en attend un (un |emberShIp ProvIder )
La versIon beta 1 nous fournIt des provIders en standard dont l'AspNetAccessProvIder quI est rattach une base de donnes Access dans le rpertoIre 0ata de votre applIcatIon. Ce provIder sera remplac dans la versIon fInale par un provIder rattach la base SQL server 2005 Express EdItIon.
Nous allons prfrer choIsIr notre propre base de donnes (Sql Server 2000) afIn de regrouper les tables quI vont y tre cres et les tables que nous dfInIrons nous mme pour notre applIcatIon web.
Nous crons au pralable notre base de donnes SItePerso vIa l'EnterprIse |anager de Sql Server. Nous confIgurons ensuIte tres sImplement, dans le sIte d'admInIstratIon de notre sIte web, l'acces notre base vIa ce formulaIre :
.NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 4
En sauvegardant, voIcI les optIons proposes :
Comme vous le voyez un certaIn nombre d'optIons Intressantes sont dIsponIbles. Dn peut par exemple s'assurer qu' un emaIl corresponde un membre, qu'un utIlIsateur puIsse retrouver son mot de passe (un peu normal, non :), avoIr recours une questIon - rponse pour s'assurer qu'Il s'agIt bIen de l'utIlIsateur ou encore faIre en sorte que le mot de passe soIt automatIquement crypt dans la base de donnes.
ClIquons : Nous avons alors cr notre provIder sql01 . Jetons un Il notre base de donnes vIa un dIagramme pour avoIr un aperu des tables et des relatIons cres.
.NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 5
Le nommage des tables permet de comprendre que l'organIsatIon est assez sImple. Les opratIons sur ces tables sont gres par des procdures stockes.
PuIsque nous avons la structure gnrale, rIen ne nous InterdIt l'avenIr d'ajouter nos propres tables et de ralIser des lIaIsons avec celles reprsentants les utIlIsateurs, leurs roles ou leurs profIles.
Fetournons dans l'AdmInIstrate WebsIte , nous allons y dfInIr des membres. Tout se passe dans l'onglet scurIt . l nous faut dfInIr au moIns un membre et un role pour pouvoIr tester notre authentIfIcatIon par formulaIre.
.NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 6
Allons voIr le fIchIer web.confIg de notre applIcatIon web :
Le fIchIer a t modIfI. Dn y retrouve des sectIons consacres nos dIffrents provIders (|emberShIp, Fole ou ProfIle). Une sectIon partIculIere connectIonStrIngs permet de rassembler toutes les chanes de connexIon, ce quI est relatIvement utIle pour s'y retrouver. FInalIsatIon de l'authentIfIcatIon par formulaIre
Ajoutons ces lIgnes de code dans le fIchIer web.confIg :
authentIcatIon mode=Forms forms name=.ASPXUSEFAUTH logInUrl=AdmIn/logIn.aspx / /authentIcatIon
et
locatIon path=admIn system.web .NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 7 authorIzatIon deny users=: / /authorIzatIon /system.web /locatIon
A la page LogIn.aspx , fournIssons le provIder au composant LogIn :
CompIlons le tout et accdons au rpertoIre admIn , nous sommes bIen redIrIg vers la page LogIn.aspx . 7ous constaterez quelques erreurs javascrIpt, c'est normal nous sommes en beta 1 ! SI nous regardons la source vIa notre navIgateur web, nous IdentIfIons la lIgne IncrImIner :
Pour faIre fonctIonner correctement, nous avons remplac Eamp ; par E .
Nous obtenons du javascrIpt. Le composant LogIn gnere du code en appelant l' Http Handler WebFesource.axd.
Fefermons cette parenthese, remplIssons le formulaIre LogIn de notre page par le logIn et le mot de passe que vous aurez dfInI prcdemment. L'authentIfIcatIon se passe bIen puIsque nous sommes redIrIgs sur la page AdmIn/0efault.aspx .
7ous aurez sans doute remarqu que nous n'avons pas crIt la moIndre lIgne de code !
7ous allez pouvoIr maIntenant commencer ralIser votre backoffIce . Pour grer les membres, les dIffrents composants de la famIlle LogIn de la bote outIls vont pouvoIr vous aIder le faIre tres vIde. 7ous allez pouvoIr jouer avec les roles aussI pour tablIr des nIveaux d'acces.
8Ien vIdemment, sI une grande partIe se faIt by desIgn , les codeurs auront acces aux dIffrents AP relatIves sans probleme. 7ous pouvez mme redfInIr vos propres provIders grce aux classes :
C'est une archItecture bIen pense puIsque notre applIcatIon (son code) ne dpend pas du type de base de donnes (on change de provIder vIa le web.confIg). .NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 8 Par exemple, sI vous avez une base |ySql , rIen ne s'oppose son utIlIsatIon. 8Ien vIdemment, Il vous faudra coder les provIders (la communaut Dpen Source en fournIra sans doute tres rapIdement) en hrItant de |emberShIpProvIder, de FoleProvIder... J. Un regard dans S
7ous vous doutez bIen que sI j'aI InsIst pour faIre la prsentatIon en me servant d'S plutot que du serveur Web ddI au dveloppeur, ce n'est pas seulement parce que j'aI du mal perdre certaInes habItudes. Nous avons des dcouvertes faIre ;)
Lanons la console d'admInIstratIon d'S. Et nous constatons que nous avons un nouvel onglet ddI ASP.NET :
CeluIcI permet de spcIfIer sur quelle versIon du framework fonctIonne votre applIcatIon web.
Festons sur la versIon 2.0 et clIquons sur EdIt ConfIguratIon .
Nous obtenons le tableau de bord suIvant :
.NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 9
Ce tableau est mapp sur le fIchIer web.confIg et Inversement ! Je vous laIsse dcouvrIr toutes les possIbIlIts de grer votre applIcatIon Web de manIere plus convIvIale que l'dItIon du fIchIer web.confIg, en partIculIer, surtout pour l'admInIstrateur de la machIne en productIon !
TermInons par un autre aspect de scurIt : je vous aI sans doute agac en prtendant parler de scurIt et en laIssant en claIr le mot de passe de ma base de donnes dans le web.confIg. Eh bIen, je l'aI faIt expres ;) L'admInIstrateur de la machIne en productIon va s'en charger. Et comment :
Crce une optIon de la commande en lIgne d'aspnet_regIIs.exe : Aspnet_regIIs -pe connectIonStrIngs -app /SItePerso pe permet d'encrypter une sectIon du Web.confIg
Fegardons notre fIchIer web.confIg :
.NET passIonnment, tout sImpIement ScurIt ASP.NET 2.0 : l'authentIfIcatIon par formulaIre FrdrIc |lantoIs pour le sIte 0otNetTech, septembre 2004 10 Ce n'est pas merveIlleux :
pd permet de dcrypter une sectIon du Web.confIg 4. ConclusIon l reste encore beaucoup de choses dIre et dcouvrIr sur le sujet. Pour cette premIere approche, je m'en suIs tenu l'essentIel. La versIon fInale d'ASP.NET 2.0 devraIt nous faIre gagner du temps sur des tches aussI rcurrentes que l'authentIfIcatIon. Les mthodes l'ancIenne que vous avez pu applIquer avec ASP.NET 1.1 fonctIonnent encore, je vous rassure. 7os backoffIces que vous avez rendus plus ou moIns gnrIques pourront encore vIvre. |aIs petIt petIt, vous prendrez de nouvelles habItudes ;) 5. En savoIr plus
La documentatIon sur le sujet est en perptuel IncrmentatIon. http://msdn.mIcrosoft.com/asp.net/whIdbey/default.aspx
New securIty Features In ASP.NET 2.0 http://msdn.mIcrosoft.com/lIbrary/default.asp:url=/lIbrary/en us/dnvs05/html/SecFeatNT2.asp
Un numro spcIal de |S0N |agazIne : ASP.NET 2.0 Fevealed ! http://msdn.mIcrosoft.com/msdnmag/Issues/04/06/default.aspx
Une srIe de Webcasts sur ASP.NET 2.0 suIvre : http://msdn.mIcrosoft.com/traInIng/webcasts/#ASP
ScurIsez vos applIcatIons .NET partIe 1 et 2 (ElIse 0upont) http://www.dotnetfr.org/sectIons.phpJ:op=vIewartIcleEartId=71 http://www.dotnetfr.org/sectIons.phpJ:op=vIewartIcleEartId=75