Sdílet prostřednictvím


Postupy: Omezení přístupu pomocí třídy PrincipalPermissionAttribute

Řízení přístupu k prostředkům na počítači s doménou s Windows je základní úlohou zabezpečení. Například jenom někteří uživatelé by měli mít možnost zobrazit citlivá data, například informace o mzdách. Toto téma vysvětluje, jak omezit přístup k metodě tím, že vyžaduje, aby uživatel patřil do předdefinované skupiny. Pracovní ukázku najdete v tématu Autorizace přístupu k operacím služby.

Úkol se skládá ze dvou samostatných postupů. První vytvoří skupinu a naplní ji uživateli. Druhá použije PrincipalPermissionAttribute třídu k určení skupiny.

Vytvoření skupiny Systému Windows

  1. Otevřete konzolu Správa počítače.

  2. Na levém panelu klikněte na Místní uživatelé a skupiny.

  3. Klikněte pravým tlačítkem myši na Skupiny a klikněte na Možnost Nová skupina.

  4. Do pole Název skupiny zadejte název nové skupiny.

  5. Do pole Popis zadejte popis nové skupiny.

  6. Kliknutím na tlačítko Přidat přidáte do skupiny nové členy.

  7. Pokud jste se přidali do skupiny a chcete otestovat následující kód, musíte se odhlásit a znovu se přihlásit, aby byla zahrnuta do skupiny.

Vyžádání členství uživatelů

  1. Otevřete soubor kódu wcf (Windows Communication Foundation), který obsahuje implementovaný kód kontraktu služby. Další informace o implementaci kontraktu naleznete v tématu Implementace kontraktů služeb.

  2. Použijte atribut pro každou metodu PrincipalPermissionAttribute , která musí být omezena na konkrétní skupinu. Action Nastavte vlastnost na Demand a Role vlastnost na název skupiny. Příklad:

    // 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
    
    

    Poznámka:

    Pokud použijete PrincipalPermissionAttribute atribut na kontrakt, SecurityException bude vyvolán. Atribut můžete použít pouze na úrovni metody.

Řízení přístupu k metodě pomocí certifikátu

Třídu můžete také použít PrincipalPermissionAttribute k řízení přístupu k metodě, pokud typ přihlašovacích údajů klienta je certifikát. K tomu musíte mít předmět certifikátu a kryptografický otisk.

Chcete-li zkontrolovat certifikát pro jeho vlastnosti, přečtěte si téma Postupy: Zobrazení certifikátů pomocí modulu snap-in konzoly MMC. Hodnotu kryptografického otisku najdete v tématu Postupy: Načtení kryptografického otisku certifikátu.

Řízení přístupu pomocí certifikátu

  1. PrincipalPermissionAttribute Použijte třídu na metodu, ke které chcete omezit přístup.

  2. Nastavte akci atributu na SecurityAction.Demand.

  3. Name Nastavte vlastnost na řetězec, který se skládá z názvu subjektu a kryptografického otisku certifikátu. Tyto dvě hodnoty oddělte středníkem a mezerou, jak je znázorněno v následujícím příkladu:

    // 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. PrincipalPermissionMode Nastavte vlastnost takUseAspNetRoles, jak je znázorněno v následujícím příkladu konfigurace:

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

    Nastavením této hodnoty UseAspNetRoles označíte, že Name vlastnost PrincipalPermissionAttribute bude použita k provedení porovnání řetězců. Pokud se certifikát používá jako přihlašovací údaje klienta, wcf ve výchozím nastavení zřetězí běžný název certifikátu a kryptografický otisk středníkem k vytvoření jedinečné hodnoty pro primární identitu klienta. Když UseAspNetRoles je tato primární hodnota identity nastavená jako služba PrincipalPermissionMode , porovná se s Name hodnotou vlastnosti a určí přístupová práva uživatele.

    Alternativně při vytváření služby v místním prostředí nastavte PrincipalPermissionMode vlastnost v kódu, jak je znázorněno v následujícím kódu:

    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
    

Viz také