Delen via


Procedure: Toegang beperken met de klasse PrincipalPermissionAttribute

Het beheren van de toegang tot resources op een Windows-domeincomputer is een eenvoudige beveiligingstaak. Zo moeten alleen bepaalde gebruikers gevoelige gegevens kunnen bekijken, zoals salarisgegevens. In dit onderwerp wordt uitgelegd hoe u de toegang tot een methode beperkt door te eisen dat de gebruiker deel uitmaakt van een vooraf gedefinieerde groep. Zie Toegang tot servicebewerkingen autoriseren voor een werkend voorbeeld.

De taak bestaat uit twee afzonderlijke procedures. De eerste maakt de groep en vult deze met gebruikers. De tweede past de PrincipalPermissionAttribute klasse toe om de groep op te geven.

Een Windows-groep maken

  1. Open de computerbeheerconsole .

  2. Klik in het linkerdeelvenster op Lokale gebruikers en groepen.

  3. Klik met de rechtermuisknop op Groepen en klik op Nieuwe groep.

  4. Typ een naam voor de nieuwe groep in het vak Groepsnaam .

  5. Typ een beschrijving van de nieuwe groep in het vak Beschrijving .

  6. Klik op de knop Toevoegen om nieuwe leden toe te voegen aan de groep.

  7. Als u uzelf aan de groep hebt toegevoegd en de volgende code wilt testen, moet u zich afmelden bij de computer en weer aanmelden om in de groep te worden opgenomen.

Gebruikerslidmaatschap vragen

  1. Open het WCF-codebestand (Windows Communication Foundation) dat de geïmplementeerde servicecontractcode bevat. Zie Servicecontracten implementeren voor meer informatie over het implementeren van een contract.

  2. Pas het PrincipalPermissionAttribute kenmerk toe op elke methode die moet worden beperkt tot een specifieke groep. Stel de Action eigenschap in Demand op en de Role eigenschap op de naam van de groep. Bijvoorbeeld:

    // Only members of the CalculatorClients group can call this method.
    [PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")]
    public double Add(double a, double b)
    {
        return a + b;
    }
    
    ' Only members of the CalculatorClients group can call this method.
    <PrincipalPermission(SecurityAction.Demand, Role:="CalculatorClients")> _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double
        Return a + b
    End Function
    
    

    Notitie

    Als u het PrincipalPermissionAttribute kenmerk toepast op een contract, wordt er een SecurityException gegenereerd. U kunt het kenmerk alleen toepassen op methodeniveau.

Een certificaat gebruiken om de toegang tot een methode te beheren

U kunt de klasse ook gebruiken om de PrincipalPermissionAttribute toegang tot een methode te beheren als het clientreferentietype een certificaat is. Hiervoor moet u het onderwerp en de vingerafdruk van het certificaat hebben.

Zie Certificaten weergeven met de MMC-module om een certificaat voor de eigenschappen ervan te bekijken. Zie Procedure voor het vinden van de vingerafdrukwaarde: De vingerafdruk van een certificaat ophalen.

Toegang beheren met behulp van een certificaat

  1. Pas de PrincipalPermissionAttribute klasse toe op de methode waarop u de toegang wilt beperken.

  2. Stel de actie van het kenmerk in op SecurityAction.Demand.

  3. Stel de Name eigenschap in op een tekenreeks die bestaat uit de onderwerpnaam en de vingerafdruk van het certificaat. Scheid de twee waarden met een puntkomma en een spatie, zoals wordt weergegeven in het volgende voorbeeld:

    // Only a client authenticated with a valid certificate that has the
    // specified subject name and thumbprint can call this method.
    [PrincipalPermission(SecurityAction.Demand,
        Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")]
    public double Multiply(double a, double b)
    {
        return a * b;
    }
    
    ' Only a client authenticated with a valid certificate that has the 
    ' specified subject name and thumbprint can call this method.
    <PrincipalPermission(SecurityAction.Demand, Name:="CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")> _
    Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double
        Return a * b
    End Function
    
  4. Stel de PrincipalPermissionMode eigenschap in op UseAspNetRoles zoals wordt weergegeven in het volgende configuratievoorbeeld:

    <behaviors>  
      <serviceBehaviors>  
      <behavior name="SvcBehavior1">  
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />  
      </behavior>  
      </serviceBehaviors>  
    </behaviors>  
    

    Als u deze waarde instelt om aan te UseAspNetRoles geven dat de Name eigenschap van de PrincipalPermissionAttribute eigenschap wordt gebruikt om een tekenreeksvergelijking uit te voeren. Wanneer een certificaat wordt gebruikt als clientreferentie, voegt WCF standaard de algemene naam van het certificaat en de vingerafdruk samen met een puntkomma om een unieke waarde te maken voor de primaire identiteit van de client. Als UseAspNetRoles deze waarde is ingesteld als de PrincipalPermissionMode op de service, wordt deze primaire identiteitswaarde vergeleken met de Name eigenschapswaarde om de toegangsrechten van de gebruiker te bepalen.

    Als u een zelf-hostende service maakt, kunt u de PrincipalPermissionMode eigenschap ook instellen in code, zoals wordt weergegeven in de volgende code:

    ServiceHost myServiceHost = new ServiceHost(typeof(Calculator), baseUri);
    ServiceAuthorizationBehavior myServiceBehavior =
        myServiceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>();
    myServiceBehavior.PrincipalPermissionMode =
        PrincipalPermissionMode.UseAspNetRoles;
    
    Dim myServiceBehavior As ServiceAuthorizationBehavior
    myServiceBehavior = _
       myServiceHost.Description.Behaviors.Find(Of ServiceAuthorizationBehavior)()
    myServiceBehavior.PrincipalPermissionMode = _
       PrincipalPermissionMode.UseAspNetRoles
    

Zie ook