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