Сохранять привязку MEX небезопасной при защите привязки HTTP с UsernamePasswordValidator?

StackOverflow https://stackoverflow.com/questions/1038683

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Используете ли вы одинаковую привязку на обоих? Если это так, попробуйте 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 приведен образец этого и других материалов. В этом блоге можно найти информацию о безопасном мексах. конечные точки.

Другие советы

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

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

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

<serviceMetadata httpsGetEnabled="true" />

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

<serviceMetadata httpGetEnabled="true" />

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top