ASP.NET beveiligingsoverzicht

Dit artikel bevat een inleiding tot ASP.NET beveiliging en verwijst naar de volgende Microsoft .NET Framework Class Library-naamruimten:

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

Oorspronkelijke productversie: ASP.NET
Origineel KB-nummer: 306590

Samenvatting

ASP.NET geeft u meer controle over het implementeren van beveiliging voor uw toepassing. ASP.NET beveiliging werkt in combinatie met IIS-beveiliging (Internet Information Services) en omvat verificatie- en autorisatieservices om het ASP.NET-beveiligingsmodel te implementeren. ASP.NET bevat ook een op rollen gebaseerde beveiligingsfunctie die u kunt implementeren voor zowel Windows- als niet-Windows-gebruikersaccounts.

Dit artikel is onderverdeeld in de volgende secties:

Beveiligingsstroom met een aanvraag

In de volgende stappen wordt de volgorde van gebeurtenissen beschreven wanneer een client een aanvraag indient:

  1. Een client vraagt een .aspx-pagina aan die zich op een IIS-server bevindt.
  2. De referenties van de client worden doorgegeven aan IIS.
  3. IIS verifieert de client en stuurt het geverifieerde token samen met de aanvraag van de client door naar het ASP.NET werkproces.
  4. Op basis van het geverifieerde token van IIS en de configuratie-instellingen voor de webtoepassing besluit ASP.NET of u een gebruiker wilt imiteren voor de thread die de aanvraag verwerkt. In een duidelijk verschil tussen Active Server Pages (ASP) en ASP.NET, wordt ASP.NET niet meer standaard de geverifieerde gebruiker geïmiteerd. Als u imitatie wilt inschakelen, moet u het kenmerk imiteren van de identiteitssectie in het Web.config-bestand instellen op true.

Zie ASP.NET Gegevensstroom voor meer informatie over de beveiligingsstroom.

Zie Imitatie implementeren in een ASP.NET-toepassing voor meer informatie over het imiteren in ASP.NET.

IIS onderhoudt beveiligingsgerelateerde configuratie-instellingen in de IIS-metabase. ASP.NET behoudt echter de beveiligingsinstellingen (en andere) configuratie-instellingen in XML-configuratiebestanden (Extensible Markup Language). Hoewel dit over het algemeen de implementatie van uw toepassing vanuit het oogpunt van beveiliging vereenvoudigt, vereist het beveiligingsmodel dat uw toepassing gebruikt de juiste configuratie van zowel de IIS-metabase als uw ASP.NET toepassing via het configuratiebestand (Web.config).

De volgende configuratiesecties hebben betrekking op ASP.NET beveiliging:

Verificatie

Verificatie is het proces waarmee u identificatiereferenties, zoals de naam en het wachtwoord van de gebruiker, verkrijgt en deze referenties valideert op basis van een bepaalde instantie.

ASP.NET biedt vier verificatieproviders:

Formulierverificatie

Formulierverificatie verwijst naar een systeem waarin niet-geverifieerde aanvragen worden omgeleid naar een HTML-formulier (Hypertext Markup Language) waarin gebruikers hun referenties typen. Nadat de gebruiker referenties heeft opgegeven en het formulier heeft verzonden, verifieert de toepassing de aanvraag en geeft het systeem een autorisatieticket uit in de vorm van een cookie. Deze cookie bevat de referenties of een sleutel voor het opnieuw ophalen van de identiteit. Volgende aanvragen van de browser bevatten automatisch de cookie.

Zie De verificatieprovider van Formulieren voor meer informatie over formulierverificatie.

Zie How to Implement Forms-Based Authentication in Your ASP.NET Application by Using C#.NET (Hoe u Forms-Based-verificatie implementeert in uw ASP.NET-toepassing met behulp van C#.NET) voor meer informatie over formulierverificatie in ASP.NET.

Windows-verificatie

In Windows-verificatie voert IIS de verificatie uit en wordt het geverifieerde token doorgestuurd naar het ASP.NET werkproces. Het voordeel van het gebruik van Windows-verificatie is dat hiervoor minimale codering is vereist. U kunt Windows-verificatie gebruiken om het Windows-gebruikersaccount te imiteren dat DOOR IIS wordt geverifieerd voordat u de aanvraag aan ASP.NET.

Zie De WindowsAuthenticationModule-provider voor meer informatie over Windows-verificatie.

Paspoortverificatie

Passport-verificatie is een gecentraliseerde verificatieservice, die Microsoft biedt, die een eenmalige aanmelding en kernprofielservices biedt voor lidsites. Normaal gesproken wordt Passport-verificatie gebruikt wanneer u de mogelijkheid voor eenmalige aanmelding in meerdere domeinen nodig hebt.

Zie De passport-verificatieprovider voor meer informatie over paspoortverificatie.

Standaardverificatie

Standaardverificatie wordt gebruikt wanneer u geen beveiliging voor uw webtoepassing wilt; anonieme toegang is vereist voor deze beveiligingsprovider. Van alle verificatieproviders biedt standaardverificatie maximale prestaties voor uw toepassing. Deze verificatieprovider wordt ook gebruikt wanneer u uw eigen aangepaste beveiligingsmodule gebruikt.

Vergunning

Autorisatie is het proces dat controleert of de geverifieerde gebruiker toegang heeft tot de aangevraagde resources.

ASP.NET biedt de volgende autorisatieproviders:

Bestandsautorisatie

De FileAuthorizationModule klasse voert bestandsautorisatie uit en is actief wanneer u Windows-verificatie gebruikt. FileAuthorizationModuleis verantwoordelijk voor het uitvoeren van controles op Windows Access Control Lijsten (ACL's) om te bepalen of een gebruiker toegang moet hebben.

URL-autorisatie

De UrlAuthorizationModule klasse voert URL-autorisatie (Uniform Resource Locator) uit, waarmee de autorisatie wordt beheerd op basis van de URI-naamruimte (Uniform Resource Identifier). URI-naamruimten kunnen verschillen van de fysieke map en bestandspaden die door NTFS-machtigingen worden gebruikt.

UrlAuthorizationModule implementeert zowel positieve als negatieve autorisatieverklaringen; U kunt de module dus gebruiken om selectief toegang tot willekeurige delen van de URI-naamruimte toe te staan of te weigeren voor gebruikers, rollen (zoals manager, testers en beheerders) en werkwoorden (zoals GET en POST).

Zie ASP.NET Autorisatie voor meer informatie over autorisatie in ASP.NET.

Beveiliging op basis van rollen

Beveiliging op basis van rollen in ASP.NET is vergelijkbaar met de beveiliging op basis van rollen die Microsoft COM+ en Microsoft Transaction Server (MTS) gebruiken, hoewel er belangrijke verschillen zijn. Beveiliging op basis van rollen in ASP.NET is niet beperkt tot Windows-accounts en -groepen. Als windows-verificatie en imitatie bijvoorbeeld zijn ingeschakeld, is de identiteit van de gebruiker een Windows-identiteit (User.Identity.Name = "Domain\username"). U kunt identiteiten controleren op lidmaatschap van specifieke rollen en de toegang dienovereenkomstig beperken. Bijvoorbeeld:

Visual Basic .NET-code

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

Visual C# .NET-code

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");

Als u formulierverificatie gebruikt, worden rollen niet toegewezen aan de geverifieerde gebruiker; u moet dit programmatisch doen. Als u rollen wilt toewijzen aan de geverifieerde gebruiker, gebruikt u de OnAuthenticate gebeurtenis van de verificatiemodule (in dit voorbeeld de verificatiemodule Formulieren) om een nieuw GenericPrincipal object te maken en toe te wijzen aan de eigenschap Gebruiker van de HttpContext. De volgende code illustreert dit:

Visual Basic .NET-code

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

Visual C# .NET-code

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);
         }
    }
}

Als u wilt controleren of de gebruiker een specifieke rol heeft en de toegang dienovereenkomstig wilt beperken, gebruikt u de volgende code (of vergelijkbaar) op uw .aspx pagina's:

Visual Basic .NET-code

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

Visual C# .NET-code

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");

Zie Beveiliging op basis van rollen voor meer informatie over beveiliging op basis van rollen.

Verwijzingen

Raadpleeg de volgende nieuwsgroep voor meer algemene informatie over ASP.NET:

nieuwsgroep ASP.NET

Zie het volgende artikel of de volgende boeken voor meer informatie: