Frage

Ich habe eine Maschinensteuer-Anwendung, wo ich einen einzelner Client-Computer und fünf Server-Boxen auf der Maschine Subnetz kommunizieren. Es gibt keine Domänencontroller. Ich möchte netTcpBinding für Zuverlässigkeit und Transaktionsunterstützung zu ermöglichen.

Ist es möglich, Benutzername / Passwort-Authentifizierung mit dieser Bindung zu verwenden, wenn ein Domänencontroller nicht vorhanden ist? Ich würde es vorziehen, nicht um ein Zertifikat zu verwenden, wie ich will keine Zertifikate über 900 Computer (150 Maschinen) verwalten, die nicht an dem Büro-LAN angeschlossen werden.

War es hilfreich?

Lösung

Ja, natürlich - aber nur, wenn Sie Nachrichtensicherheit (statt Transportsicherheit) verwenden. Definieren Sie Ihre Bindungskonfiguration wie folgt:

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

und dann verweisen, die Bindungskonfiguration in den Endpunkten (auf Server und Client):

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

Marc

UPDATE:
Ach ja, auf der Server-Seite, werden Sie ein Zertifikat benötigen den Dienst an den Client authenicate es nennen, und es ist auch zu verschlüsseln + Zeichen der Nachrichten verwendet. Das ist nur auf dem Server -. Kunden nichts installieren müssen

Konfiguration:

<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>

Stellen Sie sicher, dass Ihre Server-Zertifikat in den „Local Machine“ Ordner auf dem Server zu installieren, unter dem „subject name“, die Sie in Ihrer Konfigurations angeben.

Andere Tipps

Es ist etwas, das man zuerst versuchen. Set serviceNegotiationCredentials auf true:

<message negotiateServiceCredential="true"/>

Dies wird eine sichere Konversation zwischen dem Client und Ihrem Dienst ohne einen Domänencontroller erstellen.

Aber, wenn es keine Domänencontroller ist, der Client nicht Ihrem Dienst vertrauen, so wird es scheitern.

Sie sollten also die erwartete gesetzt Identität des Dienst . Sie können, dass in der WSDL Ihres Service. Standardmäßig, wenn Sie auf IIS gehostet werden, so scheint es zu sein:

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

Ich glaube nicht, dass Sie es brauchen, aber vielleicht werden Sie anonyme Anmeldung auf der Serviceseite ermöglichen müssen:

<serviceBehaviors>
    <behavior>
        <serviceCredentials>
            <windowsAuthentication allowAnonymousLogons="true"/>
        </serviceCredentials>
    </behavior>
</serviceBehaviors>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top