Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Poiché questo articolo è stato scritto, i provider di appartenenza ASP.NET sono stati sostituiti da ASP.NET Identity. Consigliamo vivamente di aggiornare le app per utilizzare la piattaforma ASP.NET Identity anziché i provider di appartenenza presenti al momento della stesura di questo articolo. ASP.NET Identity offre numerosi vantaggi rispetto al sistema di appartenenza ASP.NET, tra cui :
- Prestazioni migliori
- Estendibilità e testbilità migliorate
- Supporto per OAuth, OpenID Connect e autenticazione a due fattori
- Supporto per le identità basate su attestazioni
- Migliore interoperabilità con ASP.Net Core
ASP.NET versione 2.0 ha introdotto una serie di servizi applicativi, che fanno parte di .NET Framework e fungono da suite di servizi a blocchi predefiniti che è possibile usare per aggiungere funzionalità avanzate all'applicazione Web. Questa esercitazione illustra come configurare un sito Web nell'ambiente di produzione per l'uso dei servizi dell'applicazione e risolve i problemi comuni relativi alla gestione di account utente e ruoli nell'ambiente di produzione.
Introduzione
ASP.NET versione 2.0 ha introdotto una serie di servizi applicativi, che fanno parte di .NET Framework e fungono da suite di servizi a blocchi predefiniti che è possibile usare per aggiungere funzionalità avanzate all'applicazione Web. I servizi dell'applicazione includono:
- Appartenenza : API per la creazione e la gestione degli account utente.
- Ruoli : UN'API per la categorizzazione degli utenti in gruppi.
- Profilo : UN'API per l'archiviazione di contenuti personalizzati specifici dell'utente.
- Mappa del sito : un'API per la definizione di una struttura logica del sito sotto forma di gerarchia, che può quindi essere visualizzata tramite controlli di spostamento, ad esempio menu e percorsi di navigazione.
- Personalizzazione : un'API per mantenere le preferenze di personalizzazione, più spesso usate con WebParts.
- Monitoraggio dell'integrità : UN'API per il monitoraggio delle prestazioni, della sicurezza, degli errori e di altre metriche di integrità del sistema per un'applicazione Web in esecuzione.
Le API dei servizi dell'applicazione non sono associate a un'implementazione specifica. In alternativa, si indica ai servizi dell'applicazione di usare un provider specifico e tale provider implementa il servizio usando una particolare tecnologia. I provider più comunemente usati per le applicazioni Web basate su Internet ospitate in una società di hosting Web sono i provider che usano un'implementazione di database di SQL Server. Ad esempio, SqlMembershipProvider è un provider per l'API di appartenenza che archivia le informazioni sull'account utente in un database di Microsoft SQL Server.
L'uso dei servizi dell'applicazione e dei provider DI SQL Server comporta alcuni problemi durante la distribuzione dell'applicazione. Per iniziare, gli oggetti di database dei servizi applicazioni devono essere creati correttamente nei database di sviluppo e di produzione e inizializzati in modo appropriato. Sono inoltre necessarie impostazioni di configurazione importanti.
Annotazioni
Le API dei servizi dell'applicazione sono state progettate usando il modello di provider, un modello di progettazione che consente di specificare i dettagli di implementazione di un'API in fase di esecuzione. .NET Framework viene fornito con diversi provider di servizi dell'applicazione che possono essere usati, ad esempio SqlMembershipProvider e SqlRoleProvider, che sono provider per le API di appartenenza e ruoli che usano un'implementazione del database di SQL Server. È anche possibile creare e collegare un provider personalizzato. Infatti, l'applicazione Web Book Reviews contiene già un provider personalizzato per l'API Mappa siti (ReviewSiteMapProvider), che costruisce la mappa del sito dai dati nelle Genres tabelle e Books nel database.
Questa esercitazione inizia con un'analisi del modo in cui ho esteso l'applicazione Web Recensioni Libri per usare le API di Membership e Ruoli. Illustra quindi la distribuzione di un'applicazione Web che usa i servizi applicazione con un'implementazione del database di SQL Server e conclude risolvendo i problemi comuni relativi alla gestione degli account utente e dei ruoli nell'ambiente di produzione.
Aggiornamenti all'applicazione Recensioni libro
Negli ultimi due tutorial l'applicazione Web Book Reviews è stata aggiornata da un sito Web statico a un'applicazione Web dinamica basata sui dati completa di un set di pagine di amministrazione per la gestione di generi e recensioni. Tuttavia, questa sezione di amministrazione non è attualmente protetta. Qualsiasi utente che conosce (o indovina) l'URL della pagina di amministrazione può valzer in e creare, modificare o eliminare recensioni nel nostro sito. Un modo comune per proteggere determinate parti di un sito Web consiste nell'implementare gli account utente e quindi usare le regole di autorizzazione URL per limitare l'accesso a determinati utenti o ruoli. L'applicazione Web Book Reviews disponibile per il download con questa esercitazione supporta account utente e ruoli. Ha un singolo ruolo definito come Admin e solo gli utenti in questo ruolo possono accedere alle pagine di amministrazione.
Annotazioni
Ho creato tre account utente nell'applicazione Web Book Reviews: Scott, Jisun e Alice. Tutti e tre gli utenti hanno la stessa password: password! Scott e Jisun sono nel ruolo di amministratore, Alice non lo è. Le pagine non amministrative del sito sono ancora accessibili agli utenti anonimi. Ciò significa che non è necessario accedere per visitare il sito, a meno che non si voglia amministrarlo, nel qual caso è necessario accedere come utente nel ruolo Amministratore.
La pagina master dell'applicazione Book Reviews è stata aggiornata per includere un'interfaccia utente diversa per gli utenti autenticati e anonimi. Se un utente anonimo visita il sito, vede un collegamento per il login nell'angolo in alto a destra. Un utente autenticato visualizza il messaggio "Welcome back, username!" e un collegamento per disconnettersi. È disponibile anche una pagina di accesso (~/Login.aspx), che contiene un controllo Web di accesso che fornisce l'interfaccia utente e la logica per l'autenticazione di un visitatore. Solo gli amministratori possono creare nuovi account. Sono disponibili pagine per la creazione e la gestione degli account utente nella ~/Admin cartella .
Configurazione delle API di appartenenza e ruoli
L'applicazione Web Book Reviews usa le API Di appartenenza e ruoli per supportare gli account utente e per raggruppare tali utenti in ruoli (ovvero il ruolo di amministratore). Le SqlMembershipProvider classi di provider e SqlRoleProvider vengono usate perché si vogliono archiviare le informazioni sull'account e sul ruolo in un database di SQL Server.
Annotazioni
Questa esercitazione non deve essere un esame dettagliato della configurazione di un'applicazione Web per supportare le API di appartenenza e ruoli. Per un'analisi approfondita di queste API e dei passaggi necessari per configurare un sito Web per usarle, leggere le esercitazioni sulla sicurezza dei siti Web.
Per usare i servizi dell'applicazione con un database di SQL Server, è necessario innanzitutto aggiungere gli oggetti di database usati da questi provider al database in cui si desidera archiviare l'account utente e le informazioni sul ruolo. Questi oggetti di database necessari includono un'ampia gamma di tabelle, viste e stored procedure. Se non specificato diversamente, le SqlMembershipProvider classi di provider e SqlRoleProvider usano un database SQL Server Express Edition denominato ASPNETDB nella cartella dell'applicazione App_Data . Se tale database non esiste, viene creato automaticamente con gli oggetti di database necessari da questi provider in fase di esecuzione.
È possibile, e in genere ideale, creare oggetti di database dei servizi applicazioni nello stesso database in cui vengono archiviati i dati specifici dell'applicazione del sito Web. .NET Framework viene fornito con uno strumento denominato aspnet_regsql.exe che installa gli oggetti di database in un database specificato. È stato usato questo strumento per aggiungere questi oggetti al Reviews.mdf database nella App_Data cartella (il database di sviluppo). Più avanti in questa esercitazione verrà illustrato come usare questo strumento quando si aggiungono questi oggetti al database di produzione.
Se si aggiungono gli oggetti di database dei servizi di applicazione a un database diverso da ASPNETDB, sarà necessario personalizzare le configurazioni delle classi del provider SqlMembershipProvider e SqlRoleProvider in modo che usino il database appropriato. Per personalizzare il provider Membership, aggiungere un <elemento di appartenenza> all'interno della <system.web> sezione in Web.config; usare l'elemento< roleManager> per configurare il provider Roles. Il frammento di codice seguente è tratto dall'applicazione Book Reviews s Web.config e mostra le impostazioni di configurazione per le API Di appartenenza e ruoli. Si noti che entrambi registrano un nuovo provider ReviewMembership e ReviewRole, che utilizzano rispettivamente i provider SqlMembershipProvider e SqlRoleProvider.
<configuration>
<system.web>
...
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ReviewRole">
<providers>
<clear />
<add type="System.Web.Security.SqlRoleProvider"
name="ReviewRole"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</roleManager>
...
</system.web>
</configuration>
L'elemento Web.config del <authentication> file è stato configurato anche per supportare l'autenticazione basata su formulario.
<configuration>
<system.web>
...
<authentication mode="Forms" />
...
</system.web>
</configuration>
Limitazione dell'accesso alle pagine di amministrazione
ASP.NET semplifica la concessione o la negazione dell'accesso a un file o a una cartella specifica da parte dell'utente o dal ruolo tramite la relativa funzionalità di autorizzazione URL . Nell'esercitazione relativa alle differenze principali tra IIS e ASP.NET Development Server è stata illustrata brevemente l'autorizzazione dell'URL e il ASP.NET Development Server applicano le regole di autorizzazione URL in modo diverso per il contenuto statico e dinamico. Poiché si vuole impedire l'accesso alla ~/Admin cartella ad eccezione di quelli nel ruolo Amministratore, è necessario aggiungere regole di autorizzazione URL a questa cartella. In particolare, le regole di autorizzazione URL devono consentire agli utenti nel ruolo Admin e negare l'accesso a tutti gli altri utenti. A tale scopo, aggiungere un Web.config file alla ~/Admin cartella con il contenuto seguente:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Per ulteriori informazioni sulla funzionalità di autorizzazione URL di ASP.NET e su come usarla per identificare le regole di autorizzazione per gli utenti e per i ruoli, leggere le esercitazioni Autorizzazione Basata sull'Utente e Autorizzazione Basata sul Ruolo dai tutorial sulla sicurezza dei siti Web.
Distribuzione di un'applicazione Web che usa servizi applicativi
Quando si distribuisce un sito Web che utilizza servizi applicazione e un provider che archivia le informazioni sui servizi dell'applicazione in un database, è fondamentale creare gli oggetti di database necessari per i servizi applicazione nel database di produzione. Inizialmente il database di produzione non contiene questi oggetti, quindi quando l'applicazione viene distribuita per la prima volta (o quando viene distribuita per la prima volta dopo l'aggiunta dei servizi dell'applicazione), è necessario eseguire passaggi aggiuntivi per ottenere questi oggetti di database necessari nel database di produzione.
Un'altra sfida può verificarsi quando si distribuisce un sito Web che usa i servizi dell'applicazione se si intende replicare gli account utente creati nell'ambiente di sviluppo nell'ambiente di produzione. A seconda della configurazione appartenenza e ruoli, è possibile che anche se gli account utente creati nell'ambiente di sviluppo sono stati copiati correttamente nel database di produzione, questi utenti non possono accedere all'applicazione Web nell'ambiente di produzione. Si esaminerà la causa di questo problema e si esaminerà come impedirne l'esecuzione.
ASP.NET viene fornito con uno strumento WSAT (Web Site Administration Tool) che può essere avviato da Visual Studio e consente di gestire l'account utente, i ruoli e le regole di autorizzazione tramite un'interfaccia basata sul Web. Sfortunatamente, il servizio WSAT funziona solo per i siti Web locali, ovvero non può essere usato per gestire in remoto account utente, ruoli e regole di autorizzazione per l'applicazione Web nell'ambiente di produzione. Verranno esaminati diversi modi per implementare un comportamento simile a WSAT dal sito Web di produzione.
Aggiunta di oggetti di database tramite aspnet_regsql.exe
Nell'esercitazione Distribuzione di un database è stato illustrato come copiare le tabelle e i dati dal database di sviluppo al database di produzione e queste tecniche possono essere certamente usate per copiare gli oggetti di database dei servizi applicazioni nel database di produzione. Un'altra opzione è lo aspnet_regsql.exe strumento che aggiunge o rimuove gli oggetti di database dei servizi applicazioni da un database.
Annotazioni
Lo aspnet_regsql.exe strumento crea gli oggetti di database in un database specificato. Non esegue la migrazione dei dati in tali oggetti di database dal database di sviluppo al database di produzione. Se si intende copiare l'account utente e le informazioni sul ruolo dal database di sviluppo a quello di produzione, utilizzare le tecniche descritte nell'esercitazione Distribuzione di un Database.
Si esaminerà ora come aggiungere gli oggetti di database al database di produzione usando lo aspnet_regsql.exe strumento . Per iniziare, aprire Esplora Risorse di Windows e navigare alla directory .NET Framework versione 2.0 nel computer, %WINDIR%\ Microsoft.NET\Framework\v2.0.50727. Lì dovresti trovare lo aspnet_regsql.exe strumento. Questo strumento può essere usato dalla riga di comando, ma include anche un'interfaccia utente grafica; fare doppio clic sul aspnet_regsql.exe file per avviare il relativo componente grafico.
Lo strumento inizia visualizzando una schermata iniziale che ne spiega lo scopo. Fare clic su Avanti per passare alla schermata "Seleziona un'opzione di installazione", illustrata nella figura 1. Da qui è possibile scegliere di aggiungere gli oggetti di database dei servizi applicazioni o rimuoverli da un database. Poiché si vogliono aggiungere questi oggetti al database di produzione, selezionare l'opzione "Configura SQL Server per i servizi applicazioni" e fare clic su Avanti.
Figura 1: Scegliere di configurare SQL Server per i servizi applicazioni (fare clic per visualizzare l'immagine a dimensione intera)
Nella schermata "Selezionare il server e il database" vengono richieste informazioni per la connessione al database. Immettere il server di database, le credenziali di sicurezza e il nome del database fornito dall'azienda di hosting Web e fare clic su Avanti.
Annotazioni
Dopo aver immesso il server di database e le credenziali, è possibile che venga visualizzato un errore durante l'apertura dell'elenco a discesa del database. Lo aspnet_regsql.exe strumento esegue una query sulla sysdatabases tabella di sistema per recuperare un elenco di database nel server, ma alcune società di hosting Web bloccano i server di database in modo che queste informazioni non siano disponibili pubblicamente. Se viene visualizzato questo errore, è possibile digitare il nome del database direttamente nell'elenco a discesa.
Figura 2: Specificare lo strumento con le informazioni di connessione del database (fare clic per visualizzare l'immagine a dimensione intera)
La schermata successiva riepiloga le azioni che stanno per essere eseguite, vale a dire che gli oggetti di database dei servizi applicazioni verranno aggiunti al database specificato. Fare clic su Avanti per completare questa azione. Dopo alcuni istanti, viene visualizzata la schermata finale, notando che gli oggetti di database sono stati aggiunti (vedere la figura 3).
Figura 3: Successo! Gli oggetti di database di Application Services sono stati aggiunti al database di produzione (fare clic per visualizzare l'immagine a dimensione intera)
Per verificare che gli oggetti di database dei servizi applicazioni siano stati aggiunti correttamente al database di produzione, aprire SQL Server Management Studio e connettersi al database di produzione. Come illustrato nella figura 4, è ora possibile visualizzare le tabelle di database dei servizi dell'applicazione nel database, aspnet_Applications, aspnet_Membership, aspnet_Users e così via.
Figura 4: Verificare che gli oggetti di database siano stati aggiunti al database di produzione (fare clic per visualizzare l'immagine a dimensione intera)
Sarà necessario usare lo strumento solo quando si distribuisce l'applicazione aspnet_regsql.exe Web per la prima volta o per la prima volta dopo aver iniziato a usare i servizi dell'applicazione. Una volta che questi oggetti di database si trovano nel database di produzione, non dovranno essere aggiunti nuovamente o modificati.
Copiare gli account utenti dallo sviluppo alla produzione
Quando si usano le SqlMembershipProvider classi di provider e SqlRoleProvider per archiviare le informazioni sui servizi dell'applicazione in un database di SQL Server, le informazioni sull'account utente e sul ruolo vengono archiviate in un'ampia gamma di tabelle di database, tra cui aspnet_Users, aspnet_Membershipaspnet_Roles, e aspnet_UsersInRoles, tra le altre. Se durante lo sviluppo si creano account utente nell'ambiente di sviluppo, è possibile replicare tali account utente nell'ambiente di produzione copiando i record corrispondenti dalle tabelle di database applicabili. Se hai utilizzato la Creazione guidata per la pubblicazione del database per distribuire gli oggetti di database dei servizi applicazioni, potresti anche aver scelto di copiare i record, il che comporterebbe che gli account utente creati in sviluppo siano anche in produzione. Tuttavia, a seconda delle impostazioni di configurazione, è possibile che gli utenti i cui account sono stati creati in fase di sviluppo e copiati nell'ambiente di produzione non siano in grado di accedere dal sito Web di produzione. Che succede?
Le SqlMembershipProvider classi di provider e SqlRoleProvider sono state progettate in modo che un singolo database possa fungere da archivio utente per più applicazioni, in cui ogni applicazione potrebbe, in teoria, avere utenti con nomi utente e ruoli sovrapposti con lo stesso nome. Per garantire questa flessibilità, il database mantiene un elenco di applicazioni nella aspnet_Applications tabella e ogni utente è associato a una di queste applicazioni. In particolare, la aspnet_Users tabella include una ApplicationId colonna che collega ogni utente a un record nella aspnet_Applications tabella.
Oltre alla ApplicationId colonna, la aspnet_Applications tabella include anche una ApplicationName colonna che fornisce un nome più descrittivo per l'applicazione. Quando un sito Web tenta di usare un account utente, ad esempio la convalida delle credenziali di un utente dalla pagina di accesso, deve indicare alla classe quale SqlMembershipProvider applicazione usare. In genere esegue questa operazione specificando il nome dell'applicazione e questo valore deriva dalla configurazione del provider in Web.config , in particolare tramite l'attributo applicationName .
Ma cosa accade se l'attributo applicationName non è specificato in Web.config? In tal caso, il sistema dei membri utilizza il percorso radice dell'applicazione come valore del applicationName. Se l'attributo applicationName non è impostato in modo esplicito in Web.config, è possibile che l'ambiente di sviluppo e l'ambiente di produzione usino una radice dell'applicazione diversa e pertanto saranno associati a nomi di applicazione diversi nei servizi dell'applicazione. Se si verifica una mancata corrispondenza di questo tipo, gli utenti creati nell'ambiente di sviluppo avranno un ApplicationId valore che non corrisponde al ApplicationId valore per l'ambiente di produzione. Il risultato netto è che gli utenti non saranno in grado di accedere.
Annotazioni
Se ti trovi in questa situazione, con account utente copiati in produzione con un valore ApplicationId non corrispondente, puoi scrivere una query per aggiornare questi valori ApplicationId errati a quelli ApplicationId usati in produzione. Dopo l'aggiornamento, gli utenti i cui account sono stati creati nell'ambiente di sviluppo potranno ora accedere all'applicazione Web nell'ambiente di produzione.
La buona notizia è che è possibile eseguire un semplice passaggio per assicurarsi che i due ambienti usino lo stesso ApplicationId , impostando in modo esplicito l'attributo applicationName in Web.config per tutti i provider di servizi applicazioni. L'ho impostato esplicitamente l'attributo applicationName su "BookReviews" negli elementi <membership> e <roleManager>, come illustrato in questo frammento di Web.config.
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
Per altre informazioni sull'impostazione dell'attributo applicationName e sulla logica sottostante, vedere il post di blog di Scott Guthrie , Impostare sempre la proprietà applicationName quando si configura ASP.NET Appartenenza e altri provider.
Gestione degli account utente nell'ambiente di produzione
Lo strumento di amministrazione del sito Web (WSAT) ASP.NET semplifica la creazione e la gestione degli account utente, la definizione e l'applicazione di ruoli e la definizione delle regole di autorizzazione basate su utenti e ruoli. È possibile avviare WSAT da Visual Studio passando a Esplora soluzioni e facendo clic sull'icona ASP.NET Configurazione oppure passando ai menu Sito Web o Progetto e selezionando la voce di menu configurazione ASP.NET. Sfortunatamente, la funzionalità WSAT può funzionare solo con i siti Web locali. Pertanto, non è possibile usare il servizio WSAT dalla workstation per gestire il sito Web nell'ambiente di produzione.
La buona notizia è che tutte le funzionalità esposte da WSAT sono disponibili a livello di codice tramite le API di appartenenza e ruoli; inoltre, molte delle schermate WSAT usano i controlli standard ASP.NET correlati all'accesso. In breve, è possibile aggiungere ASP.NET pagine al sito Web che offrono le funzionalità di gestione necessarie.
Tenere presente che un precedente tutorial ha aggiornato l'applicazione web Book Reviews per includere una ~/Admin cartella e questa cartella è stata configurata per consentire solo agli utenti con il ruolo di Amministratore. È stata aggiunta una pagina a quella cartella denominata CreateAccount.aspx da cui un amministratore può creare un nuovo account utente. Questa pagina usa il controllo CreateUserWizard per visualizzare l'interfaccia utente e la logica back-end per la creazione di un nuovo account utente. Inoltre, ho personalizzato il controllo per includere un controllo CheckBox che richiede se il nuovo utente deve essere aggiunto anche al ruolo amministratore (vedere la figura 5). Con un po' di lavoro è possibile creare un set personalizzato di pagine che implementa le attività correlate alla gestione di utenti e ruoli che altrimenti verrebbero fornite da WSAT.
Annotazioni
Per altre informazioni sull'uso delle API di Membership e di Ruoli insieme ai controlli Web di ASP.NET relativi all'accesso, leggere le mie esercitazioni sulla sicurezza dei siti Web. Per altre informazioni sulla personalizzazione del controllo CreateUserWizard, vedere l'articolo Creazione di account utente e archiviazione di informazioni utente aggiuntive oppure vedere l'articolo Erich Peterson , Personalizzazione del controllo CreateUserWizard.
Figura 5: Gli amministratori possono creare nuovi account utente (fare clic per visualizzare l'immagine a dimensione intera)
Se è necessaria la funzionalità completa di WSAT, vedere Roll Your Own Web Site Administration Tool, in cui l'autore Dan Clem illustra il processo di creazione di uno strumento personalizzato simile a WSAT. Dan condivide il codice sorgente dell'applicazione (in C#) e fornisce istruzioni dettagliate per aggiungerlo al sito Web ospitato.
Sommario
Quando si distribuisce un'applicazione Web che usa l'implementazione del database dei servizi applicazioni, è prima necessario assicurarsi che il database di produzione disponga degli oggetti di database necessari. Questi oggetti possono essere aggiunti usando le tecniche descritte nell'esercitazione Distribuzione di un database ; in alternativa, è possibile usare lo aspnet_regsql.exe strumento, come illustrato in questa esercitazione. Altre sfide affrontate sono state incentrate sulla sincronizzazione del nome dell'applicazione usato negli ambienti di sviluppo e produzione (che è importante se si vuole che gli utenti e i ruoli creati nell'ambiente di sviluppo siano validi nell'ambiente di produzione) e tecniche per la gestione degli utenti e dei ruoli nell'ambiente di produzione.
Buon programmatori!
Altre informazioni
Per altre informazioni sugli argomenti illustrati in questa esercitazione, vedere le risorse seguenti:
- ASP.NET strumento di registrazione di SQL Server (aspnet_regsql.exe)
- Creazione del database di Servizi applicazioni per SQL Server
- Creazione dello schema di appartenenza in SQL Server
- Esame dell'appartenenza, dei ruoli e del profilo di ASP.NET
- Sviluppare il proprio strumento di amministrazione del sito Web
- Esercitazioni sulla sicurezza dei siti Web
- Panoramica dello strumento di amministrazione del sito Web