Ú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
Nyissa meg a Számítógép-kezelési konzolt.
A bal oldali panelen kattintson a Helyi felhasználók és csoportok elemre.
Kattintson a jobb gombbal a Csoportok elemre, és kattintson az Új csoport parancsra.
A Csoportnév mezőbe írja be az új csoport nevét.
A Leírás mezőbe írja be az új csoport leírását.
A Hozzáadás gombra kattintva új tagokat vehet fel a csoportba.
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
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.
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
Alkalmazza az osztályt PrincipalPermissionAttribute arra a metódusra, amelyhez korlátozni szeretné a hozzáférést.
Állítsa az attribútum műveletét a következőre SecurityAction.Demand: .
Á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
Á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 aName
tulajdonság aPrincipalPermissionAttribute
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. AUseAspNetRoles
szolgáltatásban beállítottPrincipalPermissionMode
elsődleges identitásértéket a rendszer összehasonlítja aName
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