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.
di Microsoft
Informazioni su come usare l'attributo [Authorize] per proteggere le pagine specifiche nell'applicazione MVC. Si apprenderà come usare lo strumento di amministrazione del sito Web per creare e gestire utenti e ruoli. Si apprenderà anche come configurare la posizione in cui vengono archiviate le informazioni sull'account utente e sul ruolo.
L'obiettivo di questa esercitazione è spiegare come usare l'autenticazione basata su form per proteggere le visualizzazioni nelle applicazioni MVC ASP.NET. Si apprenderà come usare lo strumento di amministrazione del sito Web per creare utenti e ruoli. Si apprenderà anche come impedire agli utenti non autorizzati di richiamare azioni del controller. Infine, si apprenderà come configurare dove vengono archiviati i nomi utente e le password.
Uso dello strumento di amministrazione del sito Web
Prima di eseguire altre operazioni, è necessario iniziare creando alcuni utenti e ruoli. Il modo più semplice per creare nuovi utenti e ruoli consiste nel sfruttare lo strumento di amministrazione del sito Web di Visual Studio 2008. È possibile avviare questo strumento selezionando l'opzione di menu Progetto ASP.NET Configurazione. In alternativa, è possibile avviare lo strumento di amministrazione del sito Web facendo clic sull'icona (in qualche modo spaventosa) del martello che colpisce il mondo visualizzato nella parte superiore della finestra Esplora soluzioni (vedere la figura 1).
Figura 1 - Avvio dello strumento di amministrazione del sito Web
All'interno dello strumento di amministrazione del sito Web è possibile creare nuovi utenti e ruoli selezionando la scheda Sicurezza. Fare clic sul collegamento Crea utente per creare un nuovo utente di nome Stephen (vedere la figura 2). Fornire all'utente Stephen qualsiasi password desiderata ,ad esempio segreto.
Figura 2: Creazione di un nuovo utente
Per creare nuovi ruoli, abilitare prima i ruoli e definire uno o più ruoli. Abilitare i ruoli facendo clic sul collegamento Abilita ruoli . Creare quindi un ruolo denominato Administrators facendo clic sul collegamento Crea o Gestisci ruoli (vedere la figura 3).
Figura 3: Creazione di un nuovo ruolo
Creare infine un nuovo utente denominato Sally e associare Sally al ruolo Amministratori facendo clic sul collegamento Crea utente e selezionando Amministratori durante la creazione di Sally (vedere la figura 4).
Figura 4: Aggiunta di un utente a un ruolo
Quando tutto è detto e fatto, dovresti avere due nuovi utenti di nome Stephen e Sally. È anche necessario avere un nuovo ruolo denominato Administrators. Sally è un membro del ruolo Administrators e Stephen non è.
Richiesta di autorizzazione
È possibile richiedere l'autenticazione di un utente prima che l'utente richiami un'azione del controller aggiungendo l'attributo [Authorize] all'azione. È possibile applicare l'attributo [Authorize] a una singola azione del controller oppure applicare questo attributo a un'intera classe controller.
Ad esempio, il controller nell'elenco 1 espone un'azione denominata CompanySecrets(). Poiché questa azione è decorata con l'attributo [Authorize], questa azione non può essere richiamata a meno che un utente non sia autenticato.
Elenco 1 : Controllers\HomeController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
}
}
Se si richiama l'azione CompanySecrets() immettendo l'URL /Home/CompanySecrets nella barra degli indirizzi del browser e non si è un utente autenticato, si verrà reindirizzati automaticamente alla visualizzazione Di accesso (vedere la figura 5).
Figura 5 : visualizzazione Account di accesso
È possibile usare la visualizzazione Account di accesso per immettere il nome utente e la password. Se non si è un utente registrato, è possibile fare clic sul collegamento Registra per passare alla visualizzazione Registra (vedere la figura 6). È possibile usare la visualizzazione Registra per creare un nuovo account utente.
Figura 6 : visualizzazione Registra
Dopo aver eseguito l'accesso, è possibile visualizzare la visualizzazione CompanySecrets (vedere la figura 7). Per impostazione predefinita, si continuerà ad accedere fino a quando non si chiude la finestra del browser.
Figura 7 : visualizzazione CompanySecrets
Autorizzazione in base al nome utente o al ruolo utente
È possibile usare l'attributo [Authorize] per limitare l'accesso a un'azione del controller a un determinato set di utenti o a un determinato set di ruoli utente. Ad esempio, il controller Home modificato nell'elenco 2 contiene due nuove azioni denominate StephenSecrets() e AdministratorSecrets().
Elenco 2 : Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult CompanySecrets()
{
return View();
}
[Authorize(Users="Stephen")]
public ActionResult StephenSecrets()
{
return View();
}
[Authorize(Roles = "Administrators")]
public ActionResult AdministratorSecrets()
{
return View();
}
}
}
Solo un utente con il nome utente Stephen può richiamare l'azione StephenSecrets(). Tutti gli altri utenti vengono reindirizzati alla visualizzazione Account di accesso. La proprietà Users accetta un elenco delimitato da virgole di nomi di account utente.
Solo gli utenti nel ruolo Administrators possono richiamare l'azione AdministratorSecrets(). Ad esempio, poiché Sally è un membro del gruppo Administrators, può richiamare l'azione AdministratorSecrets(). Tutti gli altri utenti vengono reindirizzati alla visualizzazione Account di accesso. La proprietà Roles accetta un elenco delimitato da virgole di nomi di ruolo.
Configurazione dell'autenticazione
A questo punto, ci si potrebbe chiedere dove vengono archiviati l'account utente e le informazioni sul ruolo. Per impostazione predefinita, le informazioni vengono archiviate in un database SQL Express (RANU) denominato ASPNETDB.mdf nella cartella App_Data dell'applicazione MVC. Questo database viene generato automaticamente dal framework di ASP.NET quando si inizia a usare l'appartenenza.
Per visualizzare il database ASPNETDB.mdf nella finestra Esplora soluzioni, è prima necessario selezionare l'opzione di menu Progetto, Mostra tutti i file.
L'uso del database SQL Express predefinito è corretto durante lo sviluppo di un'applicazione. Molto probabilmente, tuttavia, non si vuole usare il database ASPNETDB.mdf predefinito per un'applicazione di produzione. In tal caso, è possibile modificare la posizione in cui vengono archiviate le informazioni sull'account utente completando i due passaggi seguenti:
- Aggiungere gli oggetti di database di Application Services al database di produzione: modificare la stringa di connessione dell'applicazione in modo che punti al database di produzione
Il primo passaggio consiste nell'aggiungere tutti gli oggetti di database necessari (tabelle e stored procedure) al database di produzione. Il modo più semplice per aggiungere questi oggetti a un nuovo database consiste nell'sfruttare i vantaggi dell'installazione guidata di ASP.NET SQL Server (vedere la figura 8). È possibile avviare questo strumento aprendo il prompt dei comandi di Visual Studio 2008 dal gruppo di programmi di Microsoft Visual Studio 2008 ed eseguendo il comando seguente dal prompt dei comandi:
aspnet_regsql
Figura 8 : Configurazione guidata ASP.NET SQL Server
L'installazione guidata di ASP.NET SQL Server consente di selezionare un database SQL Server nella rete e di installare tutti gli oggetti di database richiesti dai servizi dell'applicazione ASP.NET. Il server di database non deve trovarsi nel computer locale.
Nota
Se non si vuole usare l'Installazione guidata ASP.NET SQL Server, è possibile trovare script SQL per aggiungere gli oggetti di database dei servizi applicazioni nella cartella seguente:
C:\Windows\Microsoft.NET\Framework\v2.0.50727
Dopo aver creato gli oggetti di database necessari, è necessario modificare la connessione di database usata dall'applicazione MVC. Modificare la stringa di connessione ApplicationServices nel file di configurazione Web (web.config) in modo che punti al database di produzione. Ad esempio, la connessione modificata in Listato 3 punta a un database denominato MyProductionDB (la stringa di connessione ApplicationServices originale è stata impostata come commento).
Elenco 3 - Web.config
<connectionStrings>
<!--<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>-->
<add name="ApplicationServices" connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyProductionDB" />
</connectionStrings>
Configurazione delle autorizzazioni del database
Se si usa la sicurezza integrata per connettersi al database, sarà necessario aggiungere l'account utente di Windows corretto come account di accesso al database. L'account corretto dipende dal fatto che si usi il server di sviluppo ASP.NET o Internet Information Services come server Web. L'account utente corretto dipende anche dal sistema operativo.
Se si usa il ASP.NET Development Server (il server Web predefinito usato da Visual Studio), l'applicazione viene eseguita nel contesto dell'account utente di Windows. In tal caso, è necessario aggiungere l'account utente di Windows come account di accesso al server di database.
In alternativa, se si usa Internet Information Services, è necessario aggiungere l'account ASPNET o l'account NT AUTHORITY/NETWORK SERVICE come account di accesso al server di database. Se si usa Windows XP, aggiungere l'account ASPNET come account di accesso al database. Se si usa un sistema operativo più recente, ad esempio Windows Vista o Windows Server 2008, aggiungere l'account NT AUTHORITY/NETWORK SERVICE come account di accesso al database.
È possibile aggiungere un nuovo account utente al database usando Microsoft SQL Server Management Studio (vedere la figura 9).
Figura 9 : Creazione di un nuovo account di accesso di Microsoft SQL Server
Dopo aver creato l'account di accesso necessario, è necessario eseguire il mapping dell'account di accesso a un utente del database con i ruoli di database corretti. Fare doppio clic sull'account di accesso e selezionare la scheda Mapping utenti. Selezionare uno o più ruoli del database dei servizi applicazioni. Ad esempio, per autenticare gli utenti, è necessario abilitare il ruolo del database aspnet_Membership_BasicAccess. Per creare nuovi utenti, è necessario abilitare il ruolo del database aspnet_Membership_FullAccess (vedere la figura 10).
Figura 10 : Aggiunta di ruoli di database di Application Services
Riepilogo
In questa esercitazione si è appreso come usare l'autenticazione dei moduli durante la compilazione di un'applicazione MVC ASP.NET. Prima di tutto, si è appreso come creare nuovi utenti e ruoli sfruttando lo strumento di amministrazione del sito Web. Successivamente, si è appreso come usare l'attributo [Autorizza] per impedire agli utenti non autorizzati di richiamare le azioni del controller. Infine, si è appreso come configurare l'applicazione MVC per archiviare le informazioni sull'utente e sul ruolo in un database di produzione.