Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ří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 FunctionPozná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.
NameNastavte 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 FunctionPrincipalPermissionMode 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
UseAspNetRolesoznačíte, žeNamevlastnostPrincipalPermissionAttributebude 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žUseAspNetRolesje tato primární hodnota identity nastavená jako službaPrincipalPermissionMode, porovná se sNamehodnotou 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