2010-04-10 3 views
3

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

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

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

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

ответ

5

Возможно ли это в сценарии межсетевого экрана внутри сети/за корпорацией?

Если это так, я бы использовал привязку netTcp (самый быстрый в этом случае) с безопасностью транспорта и учетными данными клиента 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 
    } 
} 

ли это помощь на всех?

UPDATE: конечный ресурс для всех вещей, связанных с WCF и безопасностью, будет WCF Security Guidance на Codeplex. Вы должны найти образцы и инструкции для чего угодно (и объяснения о них тоже!) На этой странице.

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

<bindings> 
    <netTcpBinding> 
    <binding name="SecuredByWindows"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows"/> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 
+0

Спасибо! Я сейчас далеко от кода, но попробую. Я использую netTcp, но у меня есть ощущение, что я не правильно настроил безопасность переноса и учетные данные клиента Windows, так как wcf wervice использует учетные данные хостов. Я буду играть с этим завтра/понедельник. Любые указатели на эти две вещи? – Sean