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>
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
%>
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
- Autenticazione di ASP.NET: Form Authentication
- Autenticazione di ASP.NET: Form Authentication con roles
- Form Authentication: un'applicazione multi login
2 pagine in totale: <<Indietro 1 [2]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Realizzare un controllo custom in ASP.NET AJAX - Prima parte
- Trovare il Page not Found...
- MailWebEventProvider perche sei public e abstract
- #919 - Gestione degli eventi in un Composite Control per ASP.NET 2.0
- #937 - Personalizzare il contenuto del profilo con l'evento Personalize
- Cosa fare se la vostra applicazione ASP o ASP.NET è vittima di SQL injection
- Disponibile parte del codice sorgente del Framework
- #908 - Cache con dipendenze aggregate con AggregateCacheDependency
- Chi ha paura di ASP.NET MVC?
- #934 - Accedere ai dati usando LinqDataSource
- Speciale Custom Control per ASP.NET
- Membership e Profile API con ASP.NET AJAX
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download


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