Megosztás a következőn keresztül:


Útmutató: Hozzáférés korlátozása a PrincipalPermissionAttribute osztálysal

A Windows-tartománybeli számítógépeken az erőforrásokhoz való hozzáférés szabályozása alapvető biztonsági feladat. Például csak bizonyos felhasználók tekinthetik meg a bizalmas adatokat, például a bérszámfejtési adatokat. Ez a témakör azt ismerteti, hogyan korlátozhatja a hozzáférést egy metódushoz úgy, hogy követeli, hogy a felhasználó egy előre definiált csoporthoz tartozjon. Működő minta : A szolgáltatáshoz való hozzáférés engedélyezése.

A feladat két külön eljárásból áll. Az első létrehozza a csoportot, és feltölti a felhasználókkal. A második az PrincipalPermissionAttribute osztályt alkalmazza a csoport megadására.

Windows-csoport létrehozása

  1. Nyissa meg a Számítógép-kezelési konzolt.

  2. A bal oldali panelen kattintson a Helyi felhasználók és csoportok elemre.

  3. Kattintson a jobb gombbal a Csoportok elemre, és kattintson az Új csoport parancsra.

  4. A Csoportnév mezőbe írja be az új csoport nevét.

  5. A Leírás mezőbe írja be az új csoport leírását.

  6. A Hozzáadás gombra kattintva új tagokat vehet fel a csoportba.

  7. Ha hozzáadta magát a csoporthoz, és tesztelni szeretné a következő kódot, ki kell jelentkeznie a számítógépről, és vissza kell jelentkeznie, hogy bekerüljön a csoportba.

Felhasználói tagság megkövetelése

  1. Nyissa meg a Windows Communication Foundation (WCF) kódfájlt, amely tartalmazza a megvalósított szolgáltatási szerződés kódját. A szerződés implementálásával kapcsolatos további információkért lásd : Szolgáltatásszerződések megvalósítása.

  2. Alkalmazza az PrincipalPermissionAttribute attribútumot minden olyan metódusra, amelyet egy adott csoportra kell korlátozni. Állítsa a tulajdonságot Demand a Action csoport nevére, a Role tulajdonságot pedig a csoport nevére. Például:

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

    Feljegyzés

    Ha az PrincipalPermissionAttribute attribútumot egy szerződésre SecurityException alkalmazza, a rendszer dobni fog. Az attribútumot csak a metódus szintjén alkalmazhatja.

Metódushoz való hozzáférés vezérlése tanúsítvány használatával

Az osztály használatával PrincipalPermissionAttribute is szabályozhatja a metódushoz való hozzáférést, ha az ügyfél hitelesítő adatainak típusa tanúsítvány. Ehhez rendelkeznie kell a tanúsítvány tulajdonosával és ujjlenyomatával.

A tanúsítvány tulajdonságainak vizsgálatához lásd : Tanúsítványok megtekintése az MMC beépülő modullal. Az ujjlenyomat értékének megkereséséhez tekintse meg a Tanúsítvány ujjlenyomatának lekérése című témakört.

Hozzáférés szabályozása tanúsítvány használatával

  1. Alkalmazza az osztályt PrincipalPermissionAttribute arra a metódusra, amelyhez korlátozni szeretné a hozzáférést.

  2. Állítsa az attribútum műveletét a következőre SecurityAction.Demand: .

  3. Állítsa a Name tulajdonságot egy sztringre, amely a tulajdonos nevéből és a tanúsítvány ujjlenyomatából áll. Különítse el a két értéket pontosvesszővel és szóközzel, ahogy az alábbi példában látható:

    // 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. Állítsa be a PrincipalPermissionMode tulajdonságot UseAspNetRoles az alábbi konfigurációs példában látható módon:

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

    Ha ezt az értéket UseAspNetRoles úgy állítja be, hogy az azt jelzi, hogy a Name tulajdonság a PrincipalPermissionAttribute sztring-összehasonlítás végrehajtására lesz használva. Ha egy tanúsítványt ügyfél-hitelesítő adatként használnak, a WCF alapértelmezés szerint összefűzi a tanúsítvány köznapi nevét és ujjlenyomatát pontosvesszővel, hogy egyedi értéket hozzon létre az ügyfél elsődleges identitásához. A UseAspNetRoles szolgáltatásban beállított PrincipalPermissionMode elsődleges identitásértéket a rendszer összehasonlítja a Name tulajdonságértékkel a felhasználó hozzáférési jogosultságainak meghatározásához.

    Másik lehetőségként egy saját üzemeltetésű szolgáltatás létrehozásakor állítsa be a PrincipalPermissionMode tulajdonságot kódban az alábbi kódban látható módon:

    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
    

Lásd még