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
Otevřete konzolu Správa počítače.
Na levém panelu klikněte na Místní uživatelé a skupiny.
Klikněte pravým tlačítkem myši na Skupiny a klikněte na Možnost Nová skupina.
Do pole Název skupiny zadejte název nové skupiny.
Do pole Popis zadejte popis nové skupiny.
Kliknutím na tlačítko Přidat přidáte do skupiny nové členy.
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ů
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.
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
PrincipalPermissionAttribute Použijte třídu na metodu, ke které chcete omezit přístup.
Nastavte akci atributu na SecurityAction.Demand.
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
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, žeName
vlastnostPrincipalPermissionAttribute
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žbaPrincipalPermissionMode
, porovná se sName
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