Condividi tramite


Autenticazione degli utenti con l'autenticazione basata su form (C#)

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

clip_image002

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

clip_image004

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

clip_image006

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

clip_image008

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

clip_image010

È 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

clip_image012

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

clip_image014

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:

  1. 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

clip_image016

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

clip_image018

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

clip_image020

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.