Безопасная служба WCF, размещенная в IIS 7 с использованием проверки подлинности Windows, ограниченной определенной группой или пользователями

StackOverflow https://stackoverflow.com/questions/1166794

Вопрос

Как настроить службу wcf, размещенную в IIS 7, чтобы разрешить доступ только определенным пользователям / группам к.

Существующая конфигурация:

<authentication mode="Windows"/> 

<services>     
 <service name="MyService.Test" behaviorConfiguration="MyService.TestBehavior">
  <endpoint address="" binding="wsHttpBinding" contract="MyService.ITest">
   <identity>
    <dns value="localhost"/>
   </identity>
  </endpoint>
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
 </service>
</services>
<behaviors>
 <serviceBehaviors>
  <behavior name="MyService.TestBehavior">
   <serviceMetadata httpGetEnabled="true"/>
   <serviceDebug includeExceptionDetailInFaults="true"/>          
  </behavior>        
 </serviceBehaviors>
</behaviors>

Затем я хочу настроить разрешения (пользователям или группам) либо в web.config, либо в файловой системе для файлов или папок.

Это было полезно?

Решение

Прежде всего, если вы находитесь в среде интрасети, вы можете и должны переключиться на NetTcpBinding - это быстрее, это более гибко, никто не может звонить извне (за пределами ваших брандмауэров) - идеально.

Далее - у вас по умолчанию включены учетные данные Windows с помощью wsHttpBinding и NetTcpBinding.В мире WCF вы обычно не защищаете файлы или папки - вы защищаете только вызовы служб - и сделать это легко с учетными данными Windows - просто добавьте атрибут PrincipalPermission к вашей реализации службы, и все готово:

class MyService : IMyService
{
  [PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")]
  public void SensitiveMethod()
  {
   ....
  }
}

Должно сработать просто отлично.

Если вам действительно нужно защитить файлы и папки, вы всегда можете использовать файл web.config и указать обычные права доступа на основе имен пользователей и групп Windows - но на самом деле это не имеет никакого отношения к WCF.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top