Безопасная служба WCF, размещенная в IIS 7 с использованием проверки подлинности Windows, ограниченной определенной группой или пользователями
-
19-09-2019 - |
Вопрос
Как настроить службу 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.
Марк