WCF через службу Windows - аутентификация клиентов - PullRequest
3 голосов
/ 10 апреля 2010

Я новичок в WCF / Security. Я создал службу WCF, которая размещается через службу Windows. Служба WCF получает данные из стороннего источника данных, который защищен с помощью проверки подлинности Windows. Мне нужно либо:

  1. Передать клиентские привилегии через службу Windows, через службу WCF и в сторонний источник данных или ...

  2. Ограничить число тех, кто может вызывать службу Windows / службу WCF для членов определенной группы AD.

Любые предложения о том, как я могу выполнить любую из этих задач?

1 Ответ

5 голосов
/ 10 апреля 2010

Это в сценарии межсетевого экрана / корпоративного межсетевого экрана?

Если это так, я бы использовал привязку netTcp (самую быструю в этом сценарии) с защитой транспорта и учетными данными клиента Windows. В этом случае учетные данные Windows вызывающего абонента будут переданы в службу WCF.

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

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
[PrincipalPermission(SecurityAction.Demand, Name = "JohnDoe")]
public void YourSensitiveMethod();

или вы можете программно проверить наличие WindowsIdentity в вашем методе обслуживания и делать с ним все, что вы хотите:

if(ServiceSecurityContext.Current.WindowsIdentity != null)
{
    WindowsPrincipal principal = new WindowsPrincipal(ServiceSecurityContext.Current.WindowsIdentity);
    if(!principal.IsInRole("Administrators")
    { 
        return; // or throw a FaultEXception or something
    } 
}

Помогает ли это вообще?

ОБНОВЛЕНИЕ: конечным ресурсом для всех вещей, связанных с WCF и безопасностью, будет Руководство по безопасности WCF на Codeplex. На этой странице вы должны найти образцы и инструкции по любому вопросу (а также пояснения к ним!).

Для защиты netTcpBinding с помощью безопасности транспорта и проверки подлинности Windows в качестве учетных данных клиента используйте следующую конфигурацию привязки:

<bindings>
  <netTcpBinding>
    <binding name="SecuredByWindows">
      <security mode="Transport">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...