Autenticazione di ASP.NET su Classic ASP

2 pagine in totale: <<Indietro 1 [2]

La protezione di pagine ASP

A questo punto la protezione è pronta e ciò che dobbiamo fare è semplicemente trovare un modo per leggere queste informazioni.

Di sicuro il sistema migliore per ricavare questi dati è l'evento Application_OnStart del vecchio e caro global.asa . Questa scelta ci permette di preservare le risorse che sono necessarie alla lettura ed all'estrazione delle informazioni, concentrando l'operazione nel momento in cui la prima pagina ASP viene richiesta.

Abbiamo diverse possibilità di azione, a questo punto, sicuramente la più comoda è appoggiarsi in tutto e per tutto al web.config, che è un file XML di testo well-formed e quindi ben si presta ad essere "letto" da un parser.

Con Classic ASP di sicuro il parser XML più usato è XmlDom, che garantisce una certa compatibilità, dato che è presente su praticamente tutte le installazioni di Windows che supportino IIS 4 o superiore.

Abbiamo già sfruttato questa tecnica in passato, con lo script #536 , anche se con finalità differenti. Con un po' di XPath per "navigare" nel documento XML possiamo raggiungere il nostro nodo e recuperare i valori, per poi salvarli in variabili Application, che ben si prestano ad essere condivise da tutte le richieste delle nostra applicazione:

<SCRIPT RUNAT="SERVER" LANGUAGE="VBS">

Sub Application_OnStart()

      ' creo un'istanza dell'oggetto XMLDOM
      set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
      xmlDom.async = false

      ' leggo il file
      xmlDom.Load(Server.MapPath("web.config"))

      ' seleziono un solo nodo con una query XPath
      set currNode = xmlDom.selectSingleNode("/configuration/system.web/authentication/forms")

      ' se c'è un nodo?
      if not currNode is nothing then
            ' salviamo in var Application
            Application("forms_cookiename") = currNode.getAttribute("name")
            Application("forms_loginUrl") = currNode.getAttribute("loginUrl")
      end if

      ' libero le risorse
      set CurrNode = Nothing
      set xmlDom = Nothing
End Sub

</SCRIPT>

Immagine

Autenticato o no?

Una volta recuperati il nome del cookie e l'URL a cui inviare l'utente nel caso in cui fosse necessaria l'autenticazione non ci resta che sfruttare quanto appena visto.

Per prima cosa dobbiamo verificare che il cookie esista, in caso contrario dovremo effettuare un redirect alla pagina, passando come parametro il percorso stesso della pagina, in modo che l'autenticazione di ASP.NET possa far tornare l'utente alla pagina su cui ha tentato di accedere.

<%
'controllo cookie
If Request.Cookies(Application("forms_cookiename")) = "" then
      ' redir alla pagina di autenticazione!
      Response.Redirect(Application("forms_loginUrl") & "?ReturnUrl=" & Server.UrlEncode(Request.ServerVariables("Url") & "?" & Request.QueryString))
end if

%>

Immagine

Questo semplice codice va messo in un file separato, che per comodità chiameremo protezione.asp, in modo che possa essere fatto l'include nelle pagine che ne hanno bisogno. E' importante che sia in cima, in modo che venga eseguito prima delle altre istruzioni, un po' come avviene con l'HttpModule FormsAuthentication di ASP.NET.

Conclusioni

Con qualche semplice trucco abbiamo esteso la comoda protezione di ASP.NET anche alle vecchie pagine ASP che dovessero ancora fare parte del nostro progetto. Gli sviluppi possibile sono molteplici e potrebbe riguardare, ad esempio, l'integrazione con i roles, sfruttando sempre XML come fonte di scambio dati tra le due tecnologie, ad esempio usando un approccio come quello spiegato da Andrea Zani in questo articolo .

Approfondimenti

2 pagine in totale: <<Indietro 1 [2]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC