В разное время вы можете измерить время, когда имеете дело с куда.
Вот некоторые решения, которые вы можете попробовать:
Если я понял хорошо, что Вы хотите выбрать роль во времени выполнения. Это может быть сделано со спросом на разрешение в рамках операции WCF. Например.
public string method1()
{
PrincipalPermission p = new PrincipalPermission(null, "Administrators");
p.Demand();
...
При хостинге сервиса WCF в IIS он будет работать в рабочем процессе ASP.NET, что означает, что можно настроить аутентификацию и авторизацию, как Вы сделали бы с веб-сервисами ASMX:
<system.Web>
<authentication mode="Windows"/>
<authorization>
<allow roles=".\Administrators"/>
<deny users="*"/>
</authorization>
</system.Web>
Затем необходимо будет отключить анонимный доступ к конечной точке в IIS и вместо этого включить Windows Integrated Authentication.
В консоли управления IIS Вы делаете это путем перевода в рабочее состояние диалогового окна 'Свойств' для виртуального каталога. Вы затем найдете настройки безопасности на вкладке 'Directory Security'.
Конечно, единственным доступным каналом передачи будет HTTP. Клиенты должны будут обеспечить свои идентификационные данные Windows в запросе на транспортном уровне с этими настройками:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WindowsSecurity">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/myservice"
binding="wsHttpBinding"
bindingConfiguration="WindowsSecurity"
contract="IMyService" />
</client>
</system.serviceModel>
Обратите внимание, что, если Ваша сервисная конечная точка использует wsHttpBinding затем, необходимо будет также добавить SSL к конечной точке, так как это - требование, осуществленное WCF когда Вы использующий безопасность транспортного уровня.
Если Вы вместо этого идете для basicHttpBinding, Вы затем можете использовать меньше режима безопасной аутентификации, доступного в WCF по имени TransportCredentialOnly, где SSL больше не требуется.
Для более подробной информации вот хороший обзор инфраструктуры безопасности в WCF.
Ларс Вильгельмсен написал решение этой проблемы. Посмотри на http://www.larswilhelmsen.com/2008/12/17/configurable-principalpermission-attribute/