Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управление доступом к ресурсам на компьютере с доменом Windows является основной задачей безопасности. Например, только некоторые пользователи должны иметь возможность просматривать конфиденциальные данные, такие как сведения о заработной плате. В этом разделе объясняется, как ограничить доступ к методу, требуя, чтобы пользователь принадлежал к предопределенной группе. Рабочий пример см. в разделе "Авторизация доступа к операциям службы".
Задача состоит из двух отдельных процедур. Первый создает группу и заполняет ее пользователями. Второй применяет PrincipalPermissionAttribute класс для указания группы.
Создание группы Windows
Откройте консоль управления компьютером .
На левой панели щелкните "Локальные пользователи и группы".
Щелкните правой кнопкой мыши группы и выберите команду "Создать группу".
В поле "Имя группы" введите имя новой группы.
В поле "Описание " введите описание новой группы.
Нажмите кнопку "Добавить ", чтобы добавить новых участников в группу.
Если вы добавили себя в группу и хотите протестировать следующий код, необходимо выйти из учетной записи и войти обратно в учетную запись, чтобы вас включили в группу.
Требование членства пользователей
Откройте файл кода Windows Communication Foundation (WCF), содержащий реализованный код контракта службы. Дополнительные сведения о реализации контракта см. в разделе "Реализация контрактов службы".
Примените атрибут к каждому методу PrincipalPermissionAttribute , который должен быть ограничен определенной группой. Установите свойство Action на Demand и свойство Role на имя группы. Рассмотрим пример.
// 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Замечание
При применении атрибута PrincipalPermissionAttribute к контракту будет выбрасываться SecurityException исключение. Атрибут можно применить только на уровне метода.
Использование сертификата для управления доступом к методу
Класс PrincipalPermissionAttribute также можно использовать для управления доступом к методу, если тип этих учетных данных является сертификатом. Для этого необходимо иметь владельца сертификата и его отпечаток.
Чтобы проверить сертификат на наличие свойств, см. Как просматривать сертификаты с помощью оснастки MMC. Чтобы найти значение отпечатка, см. статью "Практическое руководство. Извлечение отпечатка сертификата".
Управление доступом с помощью сертификата
Примените класс к методу PrincipalPermissionAttribute , к которому требуется ограничить доступ.
Установите действие атрибута на SecurityAction.Demand.
NameЗадайте для свойства строку, состоящую из имени субъекта и отпечатка сертификата. Разделите два значения с запятой и пробелом, как показано в следующем примере:// 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 Задайте для свойства значениеUseAspNetRoles, как показано в следующем примере конфигурации:
<behaviors> <serviceBehaviors> <behavior name="SvcBehavior1"> <serviceAuthorization principalPermissionMode="UseAspNetRoles" /> </behavior> </serviceBehaviors> </behaviors>Установка этого значения
UseAspNetRolesуказывает, что свойствоNameобъектаPrincipalPermissionAttributeбудет использоваться для сравнения строк. Если сертификат используется в качестве учетных данных клиента, по умолчанию WCF объединяет общее имя сертификата и отпечаток с запятой, чтобы создать уникальное значение для первичного удостоверения клиента. ЕслиUseAspNetRolesустановлено какPrincipalPermissionModeв службе, это основное значение удостоверения сравнивается со значением свойстваName, чтобы определить права доступа пользователя.Кроме того, при создании локальной службы задайте PrincipalPermissionMode свойство в коде, как показано в следующем коде:
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