Как ограничить доступ к сервису в WCF набором учетных записей Windows? - PullRequest
4 голосов
/ 15 ноября 2009

У меня есть служба WCF, которая использует привязку netTcp и безопасность транспорта. Используется проверка подлинности Windows (по умолчанию).

Все работает гладко, но я хочу убедиться, что только выбранная учетная запись пользователя Windows может использовать эту службу вместо всех в домене.

Есть ли способ сделать это так, чтобы выбранные учетные записи пользователей могли быть записаны в конфигурационном файле, и служба будет использовать их (исключая использование атрибутов)?

1 Ответ

7 голосов
/ 15 ноября 2009

Вы не можете сделать это в конфигурации - но поскольку вы используете аутентификацию Windows, вы можете легко использовать поставщиков ролей ASP.NET - либо на основе членства в роли Active Directory / домена Windows, либо на основе сборки ASP.NET. в базе данных ролей / членства.

Теперь вы можете использовать декларативный синтаксис, чтобы ограничить количество абонентов определенными группами:

[ServiceContract]
interface IMyService
{
   [OperationContract]
   [PrincipalPermission(SecurityAction.Demand, Role="YourCustomRole")]
   public string MethodLimitedToGroup(string someInput);
}

Любой, кто не входит в указанную вами группу и пытается вызвать этот метод, получит исключение SecurityException - но ничего больше.

Вы также можете ограничиться определенным набором фактических имен пользователей - хотя и не рекомендуется - слишком сложным, слишком ограничительным, как правило:

[ServiceContract]
interface IMyService
{
   [OperationContract]
   [PrincipalPermission(SecurityAction.Demand, Name="User1")]
   [PrincipalPermission(SecurityAction.Demand, Name="User2")]
   public string MethodLimitedToGroup(string someInput);
}

Вы можете определить все это в конфигурации:

<behaviors>
  <serviceBehavior>
     <behavior name="WinAuth">
        <serviceAuthorization principalPermissionMode="Windows" />
     </behavior>
  </serviceBehavior>
</behaviors>

, а затем просто назначьте это поведение службы вашей службе в вашей конфигурации:

<service name="YourService" behaviorConfiguration="WinAuth"> ......

Если вы хотите использовать предоставляемую ASP.NET базу данных о членстве / роли, укажите

        <serviceAuthorization principalPermissionMode="UseAspNetRoles" />

вместо.

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...