EcommerceDEV. Développement, optimisation et sécurisation des sites de commerce électronique.
arrowAccueil arrow Programmation arrow ASP/.Net/PHP arrow ASP.net : comment restreindre l’accès à toutes les pages de votre site Ecommerce
Jeudi 15 mai 2008
Nom d'utilisateur     Mot de passe      Conserver       Mot de passe perdu ? 
Menu
Accueil
A propos du site
Carte du site
Moteur de recherche
Nouvelles
Contactez-nous
Evénements
Lettres de nouvelles
- - - - - - -
Analyse
Conception
Optimisation
Programmation
Sécurité
Produits/Services
jan 22 2007
ASP.net : comment restreindre l’accès à toutes les pages de votre site Ecommerce Version imprimable Suggérer par mail
Appréciation des utilisateurs: / 0
FaibleMeilleur 
Programmation - ASP/.Net/PHP
Ecrit par Kamal AOUDA   
22-01-2007
ASP.net : comment restreindre l’accès à toutes les pages de votre site Ecommerce

ASP.net : comment restreindre l’accès à toutes les pages de votre site Ecommerce

Dans ce qui suit nous expliquerons comment il faut procéder pour limiter l’accès à vos pages ASP.net à un groupe restreint d’utilisateurs préalablement autorisés.

Tout d’abord vous devez modifier le fichier web.config de manière à ce que l’authentification se fasse en mode Forms. Ensuite il faut créer une page d’authentification .aspx pour permettre à l’utilisateur de renseigner ses paramètres d’authentification.

Modifiez votre fichier web.config de la manière suivante :


A. Ouvrir votre fichier web.config à l’aide de votre éditeur préféré.

B. Attribuez la valeur Forms à l’attribut <authentication>, ligne 3 de l’exemple.

C.Créez un nouvel élément <forms> comme dans l’exemple suivant, ligne 5 à 16

1. <! L’authentification doit se faire en mode Forms>
2.
3. <authentication mode="Forms">
4.
5. <forms name=".EcommerceDEVAuthentificationPattern"
6.
7. loginUrl="Login.aspx"
8.
9. protection="All"
10.
11. timeout="30"
12.
13. path="/">
14.
15. </forms>
16. </authentication>


D. Ajouter des tags <deny> et <allow> sous le tag <authorization> pour interdire l’accès aux utilisateurs anonymes et autoriser seulement ceux qui se sont authentifiés.

1. <authorization>
2. <deny users="?" /> <!—Refuser tous les utilisateurs anonymes -->
3. <allow users="*" /> <!—Accepter tous les utilisateurs qui se sont authentifiés -->
4. </authorization>


Commentaires :

* name: il s’agit du nom du cookie HTTP utilisé par ASP.net en vue de conserver l’ID et le mot de passe de l’utilisateur. Le nom attribué au cookie doit être unique sinon il pourrait y avoir des problèmes d’authentification (le problème du cross authentifcation se produit lorsque deux applications utilisent des cookies portant le même nom).

* loginUrl: contient l’adresse de la page vers laquelle les utilisateurs seront redirigés s’ils essaient d’accéder à votre site sans s’être préalablement authentifiés. Dans notre cas, la redirection se fait vers la page de login.

* protection: spécifie le niveau de protection du cookie. Cette variable peut prendre l’une ou l’autre des trois valeurs suivantes: 1) Validation : signifie que les données conservées dans le cookie doivent être validées afin de vérifier si elles n’ont pas été altérées pendant le transit entre le client et le serveur. 2) Encryption : signifie que le contenu du cookie sera encrypté. 3) All : signifie que le contenu du cookie sera à la fois validé et encrypté. C’est cette troisième valeur que nous vous recommandons d’utiliser car elle offre le plus haut niveau de sécurité.

* timeout: indique en nombre de minutes la durée au delà de laquelle le cookie expirera. La durée de vie de vos cookies doit être au moins identique à celle de votre session courante. En d’autres termes le cookie doit avoir au moins le même timeout que la session. Si vous donnez au cookie un timeout inférieur à celui de la session vos utilisateurs seront redirigés vers la page de login même si la session n’a pas encore expirée.

* path: indique le chemin vers le répertoire où les cookies sont conservés. Nous vous recommandons de laisser cette variable vide en lui attribuant la valeur “/”

E. Créez maintenant votre page de login .aspx en respectant certaines règles de base :

- Votre page de login doit contenir au moins un champ ID et un champ mot de passe. Vous pouvez à votre convenance ajouter tous les autres champs que vous souhaitez.
- Ajouter à votre formulaire un bouton de login.
- Au besoin ajouter un checkbox pour permettre à l’application de reconnaître l’utilisateur à chaque fois qu’il se reconnecte au site. Ceci lui évitera de saisir à chaque fois son ID et son mot de passe.

F. Dans la partie code (code behind) de votre page ASP.net utilisez votre langage de programmation préféré pour:

* Vérifier que le mot de passe et l’ID saisis par l’utilisateur correspondent à ceux stockés dans la base de données de votre site.

* Si l’ID et le mot de passe sont valides, créer un Forms authentication cookie et ajouter le à la collection de cookies retournés par le navigateur en appelant la méthode SetAuthCookie de la classe FormsAuthentication (consultez l’exemple donné à la fin de cet article pour plus de précisions à ce sujet). Parce que la méthode SetAuthCookie est statique vous n’avez pas besoin d’instancier la classe FormAuthentication.


* Rendre le Forms authentication cookie persistant sur la machine du client.

* Redirigez l’utilisateur vers la page d’accueil de votre application ou encore vers la page à laquelle l’utilisateur a voulu accéder avant de s’authentifier. ASP.net conserve automatiquement l’adresse de cette dernière page. Le code source reproduit à la fin de cet article vous montre comment la récupérer en vue d’effectuer la redirection.

Il est important de noter qu'ASP.net restreint l’accès uniquement aux fichiers associés à la DLL ASP.NET ISAPI. Par défaut les extensions de fichiers associées à cette DLL sont : asax, .ascx, .ashx, .asmx, .aspx, .axd, .vsdisco, .rem, .soap, .config, .cs, .csproj, .vb, .vbproj, .webinfo, .licx, .resx. Les fichiers qui ont une autre extension (.gif, .jpg, .txt, .js…) ne sont pas protégés. Pour les protéger, il vous suffit de les ajouter à la liste des fichiers associés à la DLL ASP.NET ISAPI (consultez le fichier d’aide d’IIS pour plus d’informations à ce sujet). Avant d’ajouter ces fichiers il faut savoir que les performances globales de votre application pourraient se dégrader.

Nous reproduisons ci-dessous le code source duquel vous pouvez vous inspirer pour créer votre application.


CODE SOURCE, PAGE DE LOGIN .aspx:


<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="Login.aspx.vb"
Inherits="EcommerceDEV.VBSecurity.Login"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Login</title>
<link rel="stylesheet" href="css/nomdevotrecss.css">
</head>
<body leftmargin="0" marginheight="0" marginwidth="0" topmargin="0">
<form id="frmSecurity" method="post" runat="server">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center">
<img src="images/imagepourembellirlapge.gif">
</td>
</tr>
<tr>
<td class="dividerLine">
<img src="images/imagepourcreerunespace.gif" height="6" border="0"></td>
</tr>
</table>
<table width="90%" align="center" border="0">
<tr>
<td><img src="images/ imagepourcreerunespace.gif" height="10" border="0"></td>
</tr>
<tr>
<td align="center" class="PageHeading">
Block Access To All Pages (VB)
</td>
</tr>
<tr>
<td><img src="images/ imagepourcreerunespace.gif " height="10" border="0"></td>
</tr>
<tr><td align="center">
<table>
<tr>
<td class="LabelText">Login ID: </td>
<td>
<asp:TextBox ID="txtLoginID" Runat="server"
CssClass="LabelText" />
</td>
</tr>
<tr>
<td class="LabelText">Password: </td>
<td>
<asp:TextBox ID="txtPassword" Runat="server"
CssClass="LabelText" TextMode="Password" />
</td></tr><tr><td colspan="2" align="center"><asp:CheckBox ID="chkRememberMe" Runat="server"
CssClass="LabelText" Text="Remember Me" /></td>

</tr><tr><td colspan="2" align="center"><br /><input id="btnLogin" runat="server" type="button" value="Login" />

</td> </tr> <tr> <td colspan="2" align="center">

<br /> <input type="button" value="Attempt Access without Login" onclick="document.location='Home.aspx'" />

</td> </tr> </table> </td> </tr> </table> </form> </body> </html>




CODE SOURCE, code-behind (.vb)

Option Explicit On

Option Strict On
'-----------------------------------------------------------------------------
'
' Module Name: Login.aspx.vb
'
' Description: This module provides the code behind for the
' Login.aspx page
'
'*****************************************************************************
Imports Microsoft.VisualBasic
Imports System.Configuration
Imports System.Data
Imports System.Data.OleDb
Imports System.Web.Security
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Namespace EcommerceDEV.VBSecurity.Login
Public Class Login
Inherits System.Web.UI.Page
'controls on the form
Protected txtLoginID As TextBox
Protected txtPassword As TextBox
Protected chkRememberMe As CheckBox
Protected WithEvents btnLogin As HtmlInputButton

'*************************************************************************
'
' ROUTINE: Page_Load
'
' DESCRIPTION: This routine provides the event handler for the page load
' event. It is responsible for initializing the controls
' on the page.
'-------------------------------------------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
'Put user code to initialize the page here
End Sub 'Page_Load
'*************************************************************************
'
' ROUTINE: btnLogin_ServerClick
'
' DESCRIPTION: This routine provides the event handler for the login
' button click event. It is responsible for authenticating
' the user and redirecting to the next page if the user
' is authenticated.
'-------------------------------------------------------------------------
Private Sub btnLogin_ServerClick(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnLogin.ServerClick
'name of querystring parameter containing return URL
Const QS_RETURN_URL As String = "ReturnURL"
Dim dbConn As OleDbConnection
Dim dCmd As OleDbCommand
Dim dr As OleDbDataReader
Dim strConnection As String
Dim strSQL As String
Dim nextPage As String
Try

'get the connection string from web.config and open a connection
'to the database
strConnection = _
ConfigurationSettings.AppSettings("dbConnectionString")
dbConn = New OleDb.OleDbConnection(strConnection)
dbConn.Open( )
'check to see if the user exists in the database
strSQL = "SELECT (FirstName + ' ' + LastName) AS UserName " & _
"FROM AppUser " & _
"WHERE LoginID=? AND " & _
"Password=?"
dCmd = New OleDbCommand(strSQL, dbConn)
dCmd.Parameters.Add(New OleDbParameter("LoginID",

_txtLoginID.Text))
dCmd.Parameters.Add(New OleDbParameter("Password", _

txtPassword.Text))

dr = dCmd.ExecuteReader( )

If (dr.Read( )) Then

'user credentials were found in the database so notify the system

'that the user is authenticated

FormsAuthentication.SetAuthCookie(CStr(dr.Item("UserName")), _

chkRememberMe.Checked)
'get the next page for the user
If (Not IsNothing(Request.QueryString(QS_RETURN_URL))) Then
'user attempted to access a page without logging in so redirect
'them to their originally requested page
nextPage = Request.QueryString(QS_RETURN_URL)
Else
'user came straight to the login page so just send them to the
'home page
nextPage = "Home.aspx"
End If
'Redirect user to the next page
'NOTE: This must be a Response.Redirect to write the cookie to the
' user's browser. Do NOT change to Server.Transfer which
' does not cause around trip to the client browser and thus
' will not write the authentication cookie to the client
' browser.
Response.Redirect(nextPage, True)
Else
'user credentials do not exist in the database - in a production
'application this should output an error message telling the user
'that the login ID or password was incorrect
End If

Finally
'cleanup
If (Not IsNothing(dr)) Then

dr.Close( )
End If
If (Not IsNothing(dbConn)) Then
dbConn.Close( )
End If
End Try
End Sub 'btnLogin_ServerClick
End Class 'Login
End Namespace


CODE SOURCE, code-behind (.cs)

//----------------------------------------------------------------------------

// Module Name: Login.aspx.cs

// Description: This module provides the code behind for the

// Login.aspx page

//****************************************************************************

using System;

using System.Configuration;

using System.Data;

using System.Data.OleDb;

using System.Web.Security;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

namespace EcommerceDEV.VBSecurity.Login

{
public class Login : System.Web.UI.Page
{

// controls on the form
protected System.Web.UI.WebControls.TextBox txtLoginID;

protected System.Web.UI.WebControls.TextBox txtPassword;

protected System.Web.UI.WebControls.CheckBox chkRememberMe;

protected System.Web.UI.HtmlControls.HtmlInputButton btnLogin;

//************************************************************************
//
// ROUTINE: Page_Load
//
// DESCRIPTION: This routine provides the event handler for the page
// load event. It is responsible for initializing the
// controls on the page.
//------------------------------------------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
// wire the login button
this.btnLogin.ServerClick += new EventHandler(this.btnLogin_ServerClick);

} // Page_Load

//************************************************************************
//
// ROUTINE: btnLogin_ServerClick
//
// DESCRIPTION: This routine provides the event handler for the login
// button click event. It is responsible for
// authenticating the user and redirecting to the next
// page if the user is authenticated.
//
//------------------------------------------------------------------------
private void btnLogin_ServerClick(Object sender,
System.EventArgs e)
{
// name of querystring parameter containing return URL
const String QS_RETURN_URL = "ReturnURL";
OleDbConnection dbConn = null;
OleDbCommand dCmd = null;
OleDbDataReader dr = null;
String strConnection = null;
String strSQL = null;
String nextPage = null;
try
{
// get the connection string from web.config and open a connection
// to the database
strConnection =
ConfigurationSettings.AppSettings["dbConnectionString"];
dbConn = new OleDbConnection(strConnection);
dbConn.Open( );
// check to see if the user exists in the database
strSQL = "SELECT (FirstName + ' ' + LastName) AS UserName " +
"FROM AppUser " +
"WHERE LoginID=? AND " +
"Password=?";
dCmd = new OleDbCommand(strSQL, dbConn);
dCmd.Parameters.Add(new OleDbParameter("LoginID",
txtLoginID.Text));
dCmd.Parameters.Add(new OleDbParameter("Password",
txtPassword.Text));
dr = dCmd.ExecuteReader( );
if (dr.Read( ))
{
// user credentials were found in the database so notify the system
// that the user is authenticated
FormsAuthentication.SetAuthCookie((String)(dr["UserName"]),
chkRememberMe.Checked);
// get the next page for the user
if (Request.QueryString[QS_RETURN_URL] != null)
{
// user attempted to access a page without logging in so redirect
// them to their originally requested page
nextPage = Request.QueryString[QS_RETURN_URL];
}

else
{
// user came straight to the login page so just send them to the
// home page
nextPage = "Home.aspx";
}

// Redirect user to the next page
// NOTE: This must be a Response.Redirect to write the cookie to
// the user's browser. Do NOT change to Server.Transfer
// which does not cause around trip to the client browser
// and thus will not write the authentication cookie to the
// client browser.
Response.Redirect(nextPage, true);}
else

{// user credentials do not exist in the database - in a production
//application this should output an error message telling the user
// that the login ID or password was incorrect.} } // try

finally
{// cleanup
if (dr != null)
{dr.Close( );}

if (dbConn != null)
{dbConn.Close( );}} // finally
} // btnLogin_ServerClick
} // Login }
 

Kamal AOUDA

Ecommerce DEV

http://www.kamalaouda.com
 

Dernière mise à jour : ( 24-01-2007 )
Suivant >
Professional Development with Web APIs : Google, eBay, Amazon.com, MapPoint, FedEx
Professional Development with Web APIs : Google, eBay, Amazon.com, MapPoint, FedEx

Un livre idéal pour les programmeurs .Net qui veulent intégrer à leurs applications de commerce électronique, les fonctionnalités offertes à travers les services web de Google, Fedex, Ebay, Amazon et MapPoimt.

Après un bref rappel des concepts de base, ce livre aborde des sujets avancés comme l'appel des API à partir d'appareils mobiles ou des applications développées avec VBA, l'envoi d'un fax via l'API Paypal, la création de votre propre web API (cette liste n'est pas limitative). A la fin de ce livre vous trouverez des études de cas qui montrent comment utiliser les API précitées pour développer rapidement une application CRM et un un tableau de bord électronique.

 

Références

 

http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764584456.html, Denise M. Gosnell, Wrox, ISBN: 0-7645-8445-6, April 2005, 324 pages

Moteur de recherche
Recommander ce site
Collaboration
Téléchargements
Derniers événements
Aucun événement
Sondages

Souhaiteriez-vous participer au développement d'un site e-commerce en .Net ?

  
Blogs Ecommerce
Blog de capitaine commerce
top

Ce site a été crée avec le CMS Mambo. Un logiciel gratuit disponible sous licence GPL.

Copyright Ecommerce DEV 2006.

Hosted by SiteGround