panoramica della sicurezza ASP.NET

Questo articolo fornisce un'introduzione alla sicurezza ASP.NET, che fa riferimento agli spazi dei nomi della libreria di classi di Microsoft .NET Framework seguenti:

  • System.Web.Security
  • System.Web.Principal

Versione originale del prodotto: ASP.NET
Numero KB originale: 306590

Riepilogo

ASP.NET offre un maggiore controllo per implementare la sicurezza per l'applicazione. ASP.NET la sicurezza funziona in combinazione con la sicurezza di Internet Information Services (IIS) e include servizi di autenticazione e autorizzazione per implementare il modello di sicurezza ASP.NET. ASP.NET include anche una funzionalità di sicurezza basata sui ruoli che è possibile implementare sia per gli account utente Windows che per gli account utente non Windows.

Questo articolo è suddiviso nelle sezioni seguenti:

Flusso di sicurezza con una richiesta

I passaggi seguenti descrivono la sequenza di eventi quando un client effettua una richiesta:

  1. Un client richiede una pagina .aspx che si trova in un server IIS.
  2. Le credenziali del client vengono passate a IIS.
  3. IIS autentica il client e inoltra il token autenticato insieme alla richiesta del client al processo di lavoro ASP.NET.
  4. In base al token autenticato da IIS e alle impostazioni di configurazione per l'applicazione Web, ASP.NET decide se rappresentare un utente nel thread che sta elaborando la richiesta. In una differenza netta tra ASP (Active Server Pages) e ASP.NET, ASP.NET non rappresenta più l'utente autenticato per impostazione predefinita. Per abilitare la rappresentazione, è necessario impostare l'attributo di rappresentazione della sezione identity nel file Web.config su true.

Per altre informazioni sul flusso di sicurezza, vedere ASP.NET Flusso di dati.

Per altre informazioni sulla rappresentazione in ASP.NET, vedere Come implementare la rappresentazione in un'applicazione ASP.NET.

IIS gestisce le impostazioni di configurazione correlate alla sicurezza nella metabase IIS. Tuttavia, ASP.NET mantiene le impostazioni di configurazione di sicurezza (e altre) nei file di configurazione XML (Extensible Markup Language). Anche se in genere ciò semplifica la distribuzione dell'applicazione dal punto di vista della sicurezza, il modello di sicurezza adottato dall'applicazione richiede la corretta configurazione sia della metabase IIS che dell'applicazione ASP.NET tramite il relativo file di configurazione (Web.config).

Le sezioni di configurazione seguenti sono correlate alla sicurezza ASP.NET:

Autenticazione

L'autenticazione è il processo tramite il quale si ottengono le credenziali di identificazione, ad esempio il nome e la password dell'utente, e si convalidano tali credenziali in base a un'autorità.

ASP.NET offre quattro provider di autenticazione:

Autenticazione basata su form

L'autenticazione basata su form si riferisce a un sistema in cui le richieste non autenticate vengono reindirizzate a un modulo HTML (Hypertext Markup Language) in cui gli utenti digitano le credenziali. Dopo che l'utente fornisce le credenziali e invia il modulo, l'applicazione autentica la richiesta e il sistema emette un ticket di autorizzazione sotto forma di cookie. Questo cookie contiene le credenziali o una chiave per riacquisirne l'identità. Le richieste successive dal browser includono automaticamente il cookie.

Per altre informazioni sull'autenticazione basata su form, vedere Il provider di autenticazione basata su form.

Per altre informazioni sull'autenticazione basata su form in ASP.NET, vedere How To Implement Forms-Based Authentication in Your ASP.NET Application by Using C#.NET (Come implementare l'autenticazione Forms-Based nell'applicazione ASP.NET usando C#.NET).

Autenticazione di Windows

In autenticazione di Windows IIS esegue l'autenticazione e il token autenticato viene inoltrato al processo di lavoro ASP.NET. Il vantaggio dell'uso di autenticazione di Windows è che richiede codice minimo. È possibile usare autenticazione di Windows per rappresentare l'account utente di Windows autenticato da IIS prima di passare la richiesta a ASP.NET.

Per altre informazioni su autenticazione di Windows, vedere Provider WindowsAuthenticationModule.

Autenticazione di Passport

L'autenticazione Passport è un servizio di autenticazione centralizzato, fornito da Microsoft, che offre un accesso Single Sign-In e servizi di profilo di base per i siti membri. In genere, l'autenticazione Passport viene usata quando è necessaria la funzionalità di accesso Single Sign-In in più domini.

Per altre informazioni sull'autenticazione di Passport, vedere Il provider di autenticazione Passport.

Autenticazione predefinita

L'autenticazione predefinita viene usata quando non si vuole alcuna sicurezza nell'applicazione Web; per questo provider di sicurezza è necessario l'accesso anonimo. Tra tutti i provider di autenticazione, l'autenticazione predefinita offre prestazioni massime per l'applicazione. Questo provider di autenticazione viene usato anche quando si usa un modulo di sicurezza personalizzato.

Autorizzazione

L'autorizzazione è il processo che verifica se l'utente autenticato ha accesso alle risorse richieste.

ASP.NET offre i provider di autorizzazione seguenti:

Autorizzazione file

La FileAuthorizationModule classe esegue l'autorizzazione dei file ed è attiva quando si usa autenticazione di Windows. FileAuthorizationModuleè responsabile dell'esecuzione di controlli in Windows Controllo di accesso Elenchi (ACL) per determinare se un utente deve avere accesso.

Autorizzazione url

La UrlAuthorizationModule classe esegue l'autorizzazione URL (Uniform Resource Locator), che controlla l'autorizzazione in base allo spazio dei nomi URI (Uniform Resource Identifier). Gli spazi dei nomi URI possono essere diversi dalla cartella fisica e dai percorsi dei file usati dalle autorizzazioni NTFS.

UrlAuthorizationModule implementa asserzioni di autorizzazione positive e negative; è quindi possibile usare il modulo per consentire o negare in modo selettivo l'accesso a parti arbitrarie dello spazio dei nomi URI per utenti, ruoli (ad esempio manager, tester e amministratori) e verbi (ad GET esempio e POST).

Per altre informazioni sull'autorizzazione in ASP.NET, vedere autorizzazione ASP.NET.

Sicurezza basata sui ruoli

La sicurezza basata sui ruoli in ASP.NET è simile alla sicurezza basata sui ruoli usata da Microsoft COM+ e Microsoft Transaction Server (MTS), anche se esistono differenze importanti. La sicurezza basata sui ruoli in ASP.NET non è limitata agli account e ai gruppi di Windows. Ad esempio, se sono abilitati autenticazione di Windows e la rappresentazione, l'identità dell'utente è un'identità di Windows (User.Identity.Name = "Domain\username"). È possibile controllare le identità per l'appartenenza in ruoli specifici e limitare l'accesso di conseguenza. Ad esempio:

Codice .NET di Visual Basic

If User.IsInRole("BUILTIN\Administrators") Then
    Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
    Response.Write("You are a User")
Else
    Response.Write("Invalid user")
End if

Codice .NET di Visual C#

if ( User.IsInRole("BUILTIN\\Administrators"))
    Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
    Response.Write("You are a User");
else
    Response.Write("Invalid user");

Se si usa l'autenticazione basata su form, i ruoli non vengono assegnati all'utente autenticato; è necessario eseguire questa operazione a livello di codice. Per assegnare ruoli all'utente autenticato, utilizzare l'evento OnAuthenticate del modulo di autenticazione (ovvero il modulo di autenticazione basata su form in questo esempio) per creare un nuovo GenericPrincipal oggetto e assegnarlo alla proprietà User dell'oggetto HttpContext. Il codice seguente illustra quanto segue:

Codice .NET di Visual Basic

Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
    If (Not(HttpContext.Current.User Is Nothing)) Then
        If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
            Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
            Dim myRoles(3) As String
            myRoles(0)= "managers"
            myRoles(1)= "testers"
            myRoles(2)= "developers"
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
        End If
    End If
End Sub

Codice .NET di Visual C#

public void Application_AuthenticateRequest(Object s, EventArgs e)
{
    if (HttpContext.Current.User != null)
     {
         if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
         {
             System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
             String[] myRoles = new String[3];
             myRoles[0]= "managers";
             myRoles[1]= "testers";
             myRoles[2]= "developers";
             HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
         }
    }
}

Per verificare se l'utente ha un ruolo specifico e limitare l'accesso di conseguenza, usare il codice seguente (o simile) nelle pagine di .aspx:

Codice .NET di Visual Basic

If User.IsInRole("managers") Then
    Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
    Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
    Response.Write("You are a Developer")
End if

Codice .NET di Visual C#

if (User.IsInRole("managers"))
    Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
    Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
    Response.Write("You are a Developer");

Per altre informazioni sulla sicurezza basata sui ruoli, vedere Sicurezza basata sui ruoli.

Riferimenti

Per informazioni più generali su ASP.NET, vedere il newsgroup seguente:

ASP.NET newsgroup

Per altre informazioni, vedere l'articolo o i libri seguenti: