Использование проверки подлинности роли Windows в файле App.config с WCF - PullRequest
7 голосов
/ 13 ноября 2008

Я использую службу WCF и конечную точку net.tcp с основным PermissionMode serviceAuthentication, установленным в UseWindowsGroups.

В настоящее время при реализации службы я использую атрибут PrincipalPermission, чтобы установить требования к ролям для каждого метода.

        [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
        [OperationBehavior(Impersonation = ImpersonationOption.Required)]
        public string method1()

Я пытаюсь сделать почти то же самое, за исключением того, что конфигурация для роли установлена ​​в app.config. Есть ли способ сделать это и по-прежнему использовать проверку подлинности групп Windows?

Спасибо

Ответы [ 3 ]

8 голосов
/ 14 ноября 2008

Если вы размещаете свою службу WCF в IIS, она будет работать в рабочем процессе ASP.NET, что означает, что вы можете настроить аутентификацию и авторизацию, как если бы вы использовали веб-службы ASMX:

<system.Web>
    <authentication mode="Windows"/>
    <authorization>
        <allow roles=".\Administrators"/>
        <deny users="*"/>
    </authorization>
</system.Web>

Затем вам придется отключить анонимный доступ к вашей конечной точке в IIS и вместо этого включить Встроенная проверка подлинности Windows .
В консоли управления IIS это можно сделать, вызвав ' Диалог свойств 'для вашего виртуального каталога. Затем вы найдете настройки безопасности на вкладке « Безопасность каталога ».

Конечно, единственным доступным каналом связи будет HTTP. Клиенты должны будут указать свою идентификационную информацию Windows в запросе на транспортном уровне 1013 * со следующими параметрами:

<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.

4 голосов
/ 15 августа 2009

Ларс Вильгельмсен опубликовал решение этой проблемы. Посмотри на http://www.larswilhelmsen.com/2008/12/17/configurable-principalpermission-attribute/

3 голосов
/ 14 ноября 2008

Если я правильно понял, вы хотите выбрать роль во время выполнения. Это можно сделать с требованием разрешение в рамках операции WCF. Э.Г.

public string method1()
{
    PrincipalPermission p = new PrincipalPermission(null, "Administrators");
    p.Demand();
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...