ASP.NET 2.0 Security
Andrea Saltarello
Software Architect – Managed Designs S.r.l.
http://blogs.ugidotnet.org/pape
Sponsor
Parliamo di…
•
•
•
•
Amarcord
Membership API
Login Controls bucket
Implementazione di Provider
Nella v1.x, l’implementazione della Forms
Authentication è tutta a nostro carico:
– Invocare opportunamente
RedirectFromLoginPage() o SetAuthCookie()
– Costruire il SecurityPrincipal nell’evento
AuthenticateRequest
ASP .NET v2 espone una API completa per
la security applicativa: la Membership API
Membership API
Astrae la struttura del DB utenti dalla applicazione
– I nomi “Mapper” e “Gateway” vi ricordano qualcosa? 
L’astrazione si presenta sotto forma di Provider (à la
ADO .NET)
I Provider implementano interfacce (conosciute al
runtime) che espongono le operazioni securityoriented più comuni, ad es:
–
–
–
–
–
GetAllUsers
GetUser
GetRoles
IsInRole
…
Membership Providers
ASP .NET 2 offre alcuni provider:
• Access (sarà rimosso in beta2, ma dicono che
sarà rilasciato il sorgente attuale)
• SQL Server
• Active Directory
E’ possibile implementare provider custom (ne
parliamo dopo )
Controlli “Login”
Web Controls che si basano sulla
membership API:
• Non richiedono scrittura di codice
• Si interfacciano alle feature di security di ASP
.NET 2.0
<asp:login />
<asp:loginname />
<asp:loginstatus />
<asp:loginview />
<asp:passwordrecovery />
<asp:createuserwizard />
<asp:changepassword />
Demo
ASP.NET Admin Tool
I provider espongono anche le funzionalità
di create/update/delete degli utenti, quindi
è possibile creare un tool generico di
amministrazione basato sulla membership
API
L’idea è troppo intelligente per essere mia,
infatti ASP.NET 2 lo ha già 
Demo
Membership API vs. Custom DB
Per utilizzare il proprio DB utenti, è
sufficiente creare un nuovo provider
Occorre implementare:
– Membership Provider: implementa il
mapping tra la API e il database utenti
– Role Provider: implementa il mapping tra gli
utenti ed il database dei ruoli applicativi
Membership Providers
E’ una classe derivata di
System.Web.Security.MembershipProvider
Deve essere registrata
<membership defaultProvider="CustomMembershipProvider">
<providers>
<add name="CustomMembershipProvider“
type=“MioNamespace.CustomMembershipProvider" />
</providers>
</membership>
Role Providers
E’ una classe derivata di
System.Web.Security.RoleProvider
Deve essere registrata
<roleManager enabled="true" defaultProvider="CustomRoleProvider">
<providers>
<add name="CustomRoleProvider"
type=“MioNamespace.CustomRoleProvider" />
</providers>
</roleManager>
Porting di codebase ASP.NET 1.1
In fase di migrazione di applicazioni ASP.NET
esistenti, è possibile sfruttare la
membership API utilizzando il pattern
Adapter per esporre sotto forma di provider
le funzionalità implementate ai… “tempi
della pietra” (cioè con la v1.1 )
Adapter pattern 101
Convert the interface of a class into another
interface clients expect. Adapter lets
classes work together that couldn't
otherwise because of incompatible
interfaces.
demo
Role-based Navigation
L’elemento siteMapNode nel file
web.sitemap dispone di un attributo roles
L’attributo roles specifica i ruoli applicativi
cui sarà accessibile la voce del menu.
Richiede l’abilitazione del SecurityTrimming
SecurityTrimming
Non può essere (dis)abilitato programmaticamente
Deve essere impostato nel file di configurazione:
<siteMap defaultProvider="AspNetXmlSiteMapProvider" enabled="true">
<providers>
<clear />
<add name="AspNetXmlSiteMapProvider"
type="System.Web.XmlSiteMapProvider, System.Web,
Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="web.sitemap" SecurityTrimmingEnabled="true" />
</providers>
</siteMap>
demo
Links
http://www.ugidotnet.org
http://forum.ugidotnet.org
http://mobile.ugidotnet.org
http://wiki.ugidotnet.org
Scarica

ASP.NET 2.0 Security