2 pagine in totale: <<Indietro 1 [2]
La presenza di questo cookie implica la sicurezza che l'utente è già stato autenticato ed il cookie contiene l'identità dell'utente. ASP.NET verifica quindi se l'utente possiede le credenziali per accedere alla risorsa richiesta e, in caso affermativo, la invia. In caso contrario l'utente non può accedere alla risorsa.
Se il cookie non è presente negli header della richiesta l'utente viene automaticamente reindirizzato alla pagina contente il form di login personalizzato. L'utente inserisce le credenziali che verranno verificate. In caso l'utente venga riconosciuto viene aggiunto agli header il cookie di autenticazione e la richiesta viene inviata per l'autenticazione alla fase successiva. Come in precedenza ASP.NET verifica le credenziali dell'utente che viene indirizzato o meno alla risorsa.
Configurazione dell'autenticazione basata su Form
Come visto in precedenza l'autenticazione basata su Form viene impostata all'interno della sezione
<configuration>
<system.web>
<authentication mode="Forms">
<forms
name="nome_del_cookie"
path="path_del_cookie"
loginurl="url_di_login"
protection="All|None|Encryption|Validation"
timeout="minuti_di_vita_del_cookie"
/>
<credentials passwordFormat="Clear|SHA1|MD5">
<user name="username" password="password" />
</credentials>
</forms>
</authentication>
</system.web>
</configuration>Vediamo ora in dettaglio gli attributi dell'elemento
| name | Specifica il nome del cookie di autenticazione che verrà creato |
| path | Specifica il path per cui il cookie è valido. Normalmente viene impostato a / per proteggere il sito completo |
| loginurl | Specifica il percorso virtuale del file contenente il form di accesso |
| protection | Specifica il livello di protezione per il cookie:
|
| timeout | Specifica i minuti per la scadenza del cookie |
Indentate nell'elemento <forms> troviamo un l'elemento opzionale <credentials> che specifica l'algoritmo utilizzato per criptare le password degli utenti mediante l'attributo passwordFormat. A sua volta l'elemento <credentials> può contenere l'elenco degli utenti che potranno accedere alle risorse, mediante l'attributo <user>.
Il form di login
Giunti a questo punto, dopo aver analizzato la struttura delle sezioni relative del file web.config, passiamo alla pratica creando il form di accesso che servirà per recuperare le credenziali dell'utente che vuole accedere alle nostre risorse protette.
Il seguente codice mostra la parte HTML della pagina FormLogin.aspx che utilizzeremo nel corso di questo articolo:
<%@Page Language="VB" %>
<%@Import Namespace="System.Web.Security" %>
<html>
<head>
<title>Autenticazione con ASP.NET basata su Form</title>
<link rel="stylesheet" href="stile.css" type="text/css">
</head>
<body>
<h1>Login: inserimento Username e Password</h1>
<form runat="server">
Username: <input id="txtUsername" type="text" runat="server" /><p />
Password: <input id="txtPassword" type="password" runat="server" /><p />
<input type="submit" value="Effettua il Login" runat="server" onserverclick="DoLogin" /><p />
<div id="outMessage" runat="server" />
</form>
</body>
</html>Il codice genera un semplice pagina di login con 2 campi di testo per l'inserimento di Username e Password. Il bottone per l'invio dei dati attiva l'evento DoLogin che implementerà la procedura di controllo delle credenziali fornite. Ultimo elemento presente nella pagine è un <div> utilizzato per la visualizzazione degli errori.
La routine di login
Una volta che l'utente inserisce le proprie credenziali all'interno del form di accesso e preme il pulsante Effettua il Login, si scatenerà l'evento DoLogin associato al pulsante stesso.
Sarà necessario quindi scrivere il codice per autenticare l'utente; per far questo faremo riferimento al namespace System.Web.Security utilizzando la classe FormsAuthentication, che gestisce la protezione basata su form.
Per prima cosa vediamo quali sono i metodi e le proprietà comunemente utilizzate da questa classe:
| Autenticate | Verifica se le credenziali fornite dall'utente sono valide confrontandole con quelle inserite nel file web.config |
| GetAuthCookie | Restituisce il cookie di autenticazione senza aggiungerlo agli header della risposta (utile per personalizzare il cookie) |
| GetRedirectUrl | Restituisce il percorso della pagina che l'utente ha richiesto prima di essere reindirizzato alla pagina di login |
| RedirectFromLoginPage | Esegue le azioni necessarie dopo l'autenticazione dell'utente, quali la creazione del cookie criptato, l'aggiunta agli header della richiesta e il reindirizzamento alla pagina richiesta |
| SetAuthCookie | Crea il cookie criptato e lo aggiunge agli header ma non reindirizza l'utente. |
| SignOut | Elimina il cookie criptato corrente e disconnette l'utente dall'applicazione |
Per autenticare l'utente dovremmo quindi scrivere il gestore di eventi DoLogin che sarà eseguito quando l'utente premerà il pulsante Effettua il Login.
<script language="VB" runat="server">
Sub DoLogin(objSender As Object, objArgs As EventArgs)
If FormsAuthentication.Authenticate(txtUsername.Value, txtPassword.Value) Then
FormsAuthentication.RedirectFromLoginPage(txtUsername.Value, False)
Else
outMessage.InnerHtml = "<b>Username o password errati</b>"
End If
End Sub
</script>Il web.config
Passiamo ora alla creazione del file web.config, dove andremo ad indicare quali utenti avranno la possibilità di accedere o meno alle risorse.
<configuration>
<system.web>
<authentication mode="Forms">
<forms path="/" loginUrl="FormLogin.aspx" protection="All" timeout="30">
<credentials passwordFormat="Clear">
<user name="kappa" password="test" />
<user name="webngo" password="test" />
<user name="aspitalia" password="test" />
</credentials>
</forms>
</authentication>
<authorization>
<allow users="kappa,webngo,aspitalia" />
<deny users="?" />
</authorization>
</system.web>
</configuration>Analizzando la struttura del file web.config possiamo notare che è stata specificata la pagina FormLogin.aspx come loginUrl, quindi questa pagina sarà caricata nel momento in cui un utente non autenticato cercherà di accedere all'applicazione.
Nella sezione credentials sono specificati il nome utente e la password degli utenti a cui sarà consentito l'accesso all'applicazione.
La sezione authorization che segue indica che gli utenti kappa, webngo e aspitalia sono gli unici a cui è consentito l'accesso, in quanto è stato inserito l'elemento <deny users="?" /> che impedisce l'accesso anonimo all'applicazione.
Default.aspx
Quando l'utente accede per la prima volta alla pagina default.aspx nella cartella protetta sarà reindirizzato automaticamente alla pagina di login, dove verranno inserite username e password.
La parte HTML della pagina contiene semplicemente le due textarea dove l'utente inserirà le proprie credenziali ed un elemento <div> utilizzato per la visualizzazione degli errori.
<html>
<head>
<title>Autenticazione con ASP.NET basata su Form</title>
<link rel="stylesheet" href="stile.css" type="text/css">
</head>
<body>
<h1>Autenticazione con ASP.NET basata su Form</h1>
<div id="outMessagge" runat="server" /><p />
<form runat="server">
<input type="submit" Value="Effettua il Logout" runat="server" onserverclick="DoLogout" /><p />
</form>
</body>
</html>Per prima cosa nell'evento Page_Load della pagina verifichiamo se l'utente è già stato autenticato: in caso positivo accederemo alle proprietà dell'oggetto User.Identity per recuperare il nome ed il tipo di autenticazione utilizzato; in caso l'utente non possa essere autenticato verrà visualizzato nell'elemento <div> outMessagge un messaggio di errore.
Sub Page_Load()
If User.Identity.IsAuthenticated Then
outMessagge.InnerHtml = "Benvenuto <b>" & User.Identity.Name & "</b><br />" & "Il metodo di autenticazione utilizzato è: <b>" & User.Identity.AuthenticationType & "</b>"
Else
outMessagge.InnerHtml = "Ci spiace ma non sei autenticato"
End If
End SubNella pagina è presente anche un pulsante di logout, che se premuto scatenerà l'evento DoLogout utilizzato per disconnettere l'utente dall'applicazione, eliminando il cookie che contiene le informazioni di autenticazione dell'utente, che sarà reindirizzato alla pagina di login dove dovrà fornire nuovamente le proprie credenziali.
Sub DoLogout(objSender As Object, objArgs As EventArgs)
FormsAuthentication.SignOut()
Response.Clear()
Response.Redirect(Request.UrlReferrer.ToString())
End SubConclusioni
In questo articolo abbiamo visto come con ASP.NET risulti facile implementare una soluzione di protezione delle proprie applicazioni web. Un vantaggio indubbio rispetto a Classic ASP è l'utilizzo del file web.config che da' la possibilità di creare un sistema di protezione sicuro e allo stesso tempo semplice anche in situazioni in cui non è possibile andare a modificare le impostazioni di protezione di IIS, caso molto comune se la nostra applicazione è ospitata in hosting su macchine presso un provider.
Una cosa che si sarà notata analizzando il file web.config è che le password degli utenti sono memorizzate solo in testo, quindi chiunque potesse vedere il file (anche se questo risulta difficile, in quanto tutte le richieste di questo file sono automaticamente bloccate da ASP.NET) entrerebbe in possesso delle credenziali degli utenti abilitati.
Nel prossimo articolo di questa serie, infine, vedremo come risolvere questo problema, criptando le password all'interno del file web.config ed utilizzando sia un file XML sia un database relazionale come base per il salvataggio delle credenziali.
Approfondimenti
2 pagine in totale: <<Indietro 1 [2]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
