«Вызывающий не был аутентифицирован службой» при использовании настраиваемой привязки только на машинах в домене - PullRequest
0 голосов
/ 25 февраля 2011

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

<system.serviceModel>
  <services>
    <service behaviorConfiguration="ServiceBehavior" name="Services.DeliveryStatsService">
      <endpoint address="" binding="customBinding" bindingConfiguration="BindingWithMaxClockSkewForIncorrectlyConfiguredWindowsServer"
        contract="Services.IDeliveryStatsService" />
    </service>
  </services>

  <bindings>
    <customBinding>
      <binding name="BindingWithMaxClockSkewForIncorrectlyConfiguredWindowsServer">
        <binaryMessageEncoding />
        <security>
          <localClientSettings maxClockSkew="00:20:00" />
          <localServiceSettings maxClockSkew="00:20:00" />
          <secureConversationBootstrap />
        </security>
        <httpTransport />
      </binding>
    </customBinding>
  </bindings>

  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Это было бы просто basicHttpBinding, за исключением того, что часы сервера не установлены на нужное время и его администратор не изменит их, поэтому customBinding требуется для разрешения «clockSkew».

Клиенты используют практически одинаковую конфигурацию (в привязке) и могут без проблем обращаться к службе, если они не являются частью домена.Однако клиенты, являющиеся частью домена, отклоняются с сообщением «Вызывающая сторона не была аутентифицирована службой».

Я включил трассировку, и может показаться, что проблема возникает из-за обмена токенами с использованием аннулирования SSPI.,К сожалению, я не могу найти правильную конфигурацию, которая позволит обеим машинам, которые не являются частью домена, и машинам, которые являются частью домена, получать доступ к службе.Я пробовал несколько значений для authenticationMode, но безрезультатно.Более того, насколько мне известно, мне не нужна особая защита для этой службы.

Конфигурация WCF далеко не моя специальность, и я нигде не нашел ответа, поэтому янадеюсь, кто-нибудь в Stack Overflow сможет помочь.Заранее спасибо.

1 Ответ

1 голос
/ 25 февраля 2011

Зачем вам нужно устанавливать maxClockSkew, когда вам не нужна безопасность? Он предназначен для обработки разницы во времени в метках времени, которые не отправляются без защиты. Добавив элемент security, вы включаете аутентификацию, поскольку все атрибуты в элементе имеют значения по умолчанию. Значение по умолчанию для режима sspiNegotiated. Я бы начал с удаления security элемента.

...