Возможно ли это в сценарии межсетевого экрана внутри сети/за корпорацией?
Если это так, я бы использовал привязку 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>
Спасибо! Я сейчас далеко от кода, но попробую. Я использую netTcp, но у меня есть ощущение, что я не правильно настроил безопасность переноса и учетные данные клиента Windows, так как wcf wervice использует учетные данные хостов. Я буду играть с этим завтра/понедельник. Любые указатели на эти две вещи? – Sean