netTcpBinding без учетных данных Windows?

NDepend не свободен для использования неакадемического или программного обеспечения с открытым исходным кодом, но это является потрясающим, и даст Вам те метрики (и многие другие, с помощью его встроенного Языка запросов Кода).

Этим вопросом является более или менее простофиля этого: Вычисляют метрики кода , и Вы найдете всю серию хороших предложений там.

9
задан Peter Mortensen 31 July 2015 в 11:43
поделиться

2 ответа

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

  <netTcpBinding>
    <binding name="UserNameSecurity">
      <security mode="Message">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </netTcpBinding>

, а затем укажите эту конфигурацию привязки в своих конечных точках (на сервере и клиенте):

 <endpoint address="....."
           binding="netTcpBinding"
           bindingConfiguration="UserNameSecurity"
           contract="IMyService" />

Marc

ОБНОВЛЕНИЕ:
Ах, да, на стороне сервера вам понадобится сертификат для аутентификации службы для вызывающего ее клиента, а также он используется для шифрования и подписи сообщений. Это только на сервере - клиентам не нужно ничего устанавливать.

Конфигурация:

<behaviors>
  <serviceBehavior>
    <behavior name="ServerInternet">
      <serviceCredentials>
        <serviceCertificate
           findValue="MyServiceCertificate"
           storeLocation="LocalMachine"
           storeName="My"
           x509FindType="FindBySubjectName" />
      </serviceCredentials>
    </behavior>
  </serviceBehavior>
</behaviors>
<services>
  <service name="MyServiceInternet"
           behaviorConfiguration="ServerInternet">
     ....
  </service>
</services>

Убедитесь, что вы установили сертификат вашего сервера в папку «Локальный компьютер» на вашем сервере под «именем субъекта», которое вы указываете в своей конфигурации .

11
ответ дан 3 November 2019 в 01:02
поделиться

Сначала вы можете попробовать кое-что. Установите для serviceNegotiationCredentials значение true:

<message negotiateServiceCredential="true"/>

Это создаст безопасный диалог между вашим клиентом и вашей службой без контроллера домена.

НО, если нет контроллера домена, клиент не доверяет вашей службе, поэтому он

Таким образом, вы должны установить ожидаемый идентификатор службы . Вы можете найти это в WSDL вашей службы. По умолчанию, если вы размещены в IIS, это выглядит так:

<client>
    <endpoint>
        <identity>
            <servicePrincipalName value="host/NETWORKSERVICE"></servicePrincipalName>
        </identity>
    </endpoint>
</client>

Я не думаю, что он вам понадобится, но, возможно, вам придется разрешить анонимный вход на стороне службы:

<serviceBehaviors>
    <behavior>
        <serviceCredentials>
            <windowsAuthentication allowAnonymousLogons="true"/>
        </serviceCredentials>
    </behavior>
</serviceBehaviors>
0
ответ дан 3 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: