Сохранять привязку MEX небезопасной при защите привязки HTTP с UsernamePasswordValidator? - PullRequest
1 голос
/ 24 июня 2009

Мы используем UsernamePasswordValidator вместе с сертификатом для безопасного доступа к нашим службам WCF.

Однако используемые нами политики авторизации являются поведением SERVICE, а не поведением конечной точки, поэтому они применяются ко всем конечным точкам, включая конечную точку MEX. Мы хотели бы иметь возможность пойти и получить ссылки на службы с помощью Visual Studio без необходимости каждый раз комментировать поведение службы, но, поскольку защищены обе конечные точки mex и wshttp, мы получаем ошибку при выполнении «Добавить ссылку на службу .. "

Есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 25 июня 2009

Используете ли вы одинаковую привязку на обоих? Если это так, попробуйте 2 отдельных привязки - одну для конечной точки mex и одну для wshttp:

Так что за сервис - что-то вроде:

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

и для конечной точки mex (без защиты):

<customBinding><binding name="customMex">
<textMessageEncoding>
    <readerQuotas maxDepth="2147483647"
          maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
               maxReceivedMessageSize="2147483647"
               maxBufferSize="2147483647"/></binding></customBinding>

Конечные точки обслуживания будут выглядеть примерно так:

<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior"  binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />

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

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

0 голосов
/ 25 июня 2009

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

Здесь на ум приходят две вещи.

Удалите явную привязку mex и добавьте под поведением службы

<serviceMetadata httpsGetEnabled="true" />

Или оставьте привязку mex и включите

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator не выполняется при запросе метаданных, поэтому, если httpsgetenabled не включен, и у вас есть мекс-привязка к http, вам нужно httpGetenabled по крайней мере

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