Использование проверки подлинности Windows в файле App.config с WCF

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

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

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

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

Спасибо


person user37444    schedule 13.11.2008    source источник


Ответы (3)


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

public string method1()
{
    PrincipalPermission p = new PrincipalPermission(null, "Administrators");
    p.Demand();
    ...
person Panos    schedule 13.11.2008

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

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

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

Конечно, единственным доступным каналом связи будет 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.

person Enrico Campidoglio    schedule 14.11.2008
comment
Обратите внимание: если вы хотите сделать это, вам необходимо включить режим совместимости с ASP.NET в вашем файле web.config. В противном случае это просто не сработает (и не выдаст ошибку). - person Rocklan; 21.09.2012
comment
Примечание: для того, чтобы это работало, system.web/roleManager/@enabled должен быть false или опущен, в противном случае ролями будут роли IIS .Net, а не группы Windows. - person Polyfun; 09.02.2015

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

person Community    schedule 15.08.2009
comment
Текущий URL-адрес: larsw.wordpress.com/2008/12/17/. - person Amandalishus; 02.09.2016