Condividi tramite


Panoramica della sicurezza di ASP.NET

Questo articolo fornisce un'introduzione alla sicurezza ASP.NET, che fa riferimento agli spazi dei nomi della libreria di classi 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 insieme alla sicurezza di Internet Information Services (IIS) e include i 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 per gli account utente di Windows e 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 risiede 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 distinta tra pagine 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 gestisce le impostazioni di configurazione di sicurezza (e altre) nei file di configurazione XML (Extensible Markup Language). Anche se in genere semplifica la distribuzione dell'applicazione dal punto di vista della sicurezza, il modello di sicurezza adottato dall'applicazione richiede la configurazione corretta 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 in base al quale si ottengono credenziali di identificazione, ad esempio il nome e la password dell'utente, e convalidare tali credenziali in base a un'autorità.

ASP.NET offre quattro provider di autenticazione:

Autenticazione basata su form

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

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

Per altre informazioni sull'autenticazione basata su form in ASP.NET, vedere Come implementare l'autenticazione basata su form nell'applicazione ASP.NET tramite 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 consegnare la richiesta a ASP.NET.

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

Autenticazione Passport

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

Per altre informazioni sull'autenticazione passport, vedere Provider di autenticazione Passport.

Autenticazione predefinita

L'autenticazione predefinita viene usata quando non si desidera 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 il proprio 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 file ed è attiva quando si usa autenticazione di Windows. FileAuthorizationModuleè responsabile dell'esecuzione di controlli sugli elenchi di controllo di accesso (ACL) di Windows Controllo di accesso per determinare se un utente deve avere accesso.

Autorizzazione url

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

UrlAuthorizationModule implementa sia asserzioni di autorizzazione positive che negative; ovvero, è 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 esempio GET e POST).

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

Sicurezza basata su 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 autenticazione di Windows e la rappresentazione sono abilitati, l'identità dell'utente è un'identità di Windows (User.Identity.Name = "Domain\username"). È possibile controllare le identità per l'appartenenza a ruoli specifici e limitare di conseguenza l'accesso. 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 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, usare 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 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 si trova in 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 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: