Безопасность на уровне сообщений и безопасность на транспортном уровне в одном и том же файле конфигурации WCF - PullRequest
0 голосов
/ 17 мая 2011

Я пытаюсь настроить безопасность на уровне сообщений для приложения WCF, которое я пишу.Это приложение уже имеет конечную точку, которая настроена на безопасность транспортного уровня.Могу ли я установить другую конечную точку с защитой на уровне сообщений?Это приложение работает через IIS, кстати.Я установил отдельную службу в том же конфигурационном файле, например, так ...

<service name="generalName">
  <endpoint address=...>
   .
   .
   .
</service>
<service name="generalName2">
   <endpoint address=""...>
</service>

Причина, по которой я спрашиваю это, заключается в том, что я думаю, что все настроил и думаю, что это может работатьНо когда я пытаюсь получить доступ к предыдущей службе, я получаю следующую ошибку ...

Для параметров безопасности этой службы требуется проверка подлинности Windows, но она не включена для приложения IIS, в котором размещается эта служба.*

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

Какой-нибудь совет для меня?Стоит ли мне попробовать написать совершенно отдельный сервис или есть способы обойти это?

1 Ответ

3 голосов
/ 17 мая 2011

Не зная, какую привязку вы используете - в зависимости от того, поддерживает ли эта привязка и безопасность транспорта, и сообщения - да, конечно, вы должны иметь возможность выставить две конечные точки, одну с защитой транспорта, другую с защитой сообщений.

Поскольку это действительно одна служба с двумя конечными точками, ваша конфигурация должна выглядеть примерно так (я выбрал wsHttpBinding в качестве примера - адаптируюсь по мере необходимости):

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="TransportSec">
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
        <binding name="MessageSec">
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <services>
      <service name="YourService" >
        <endpoint name="Transport" 
              address="Transport"
              binding="wsHttpBinding"
              bindingConfiguration="TransportSec"
              contract="IYourService" />

        <endpoint name="Message"
              address="Message"
              binding="wsHttpBinding"
              bindingConfiguration="MessageSec"
              contract="IYourService" />
      </service>
    </services>
  </system.serviceModel>

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

Разумеется, эти две конечные точки не могут иметь один и тот же адрес, поэтому вам нужно дать два отдельных (относительных) адреса каждой из конечных точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...