Это в сценарии межсетевого экрана / корпоративного межсетевого экрана?
Если это так, я бы использовал привязку 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>