Question

J'ai une application de contrôle de machine où un seul ordinateur client et cinq serveurs communiquent sur le sous-réseau de l'ordinateur. Il n'y a pas de contrôleur de domaine. J'aimerais utiliser netTcpBinding . pour permettre la fiabilité et le support des transactions.

Est-il possible d'utiliser l'authentification de nom d'utilisateur / mot de passe avec cette liaison lorsqu'un contrôleur de domaine n'est pas présent? Je préférerais ne pas utiliser de certificat car je ne souhaite pas gérer de certificats sur 900 ordinateurs (150 ordinateurs) qui ne seront pas connectés au réseau local du bureau.

Était-ce utile?

La solution

Oui, bien sûr, mais uniquement si vous utilisez la sécurité des messages (plutôt que la sécurité du transport). Définissez votre configuration de liaison comme suit:

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

, puis référencez cette configuration de liaison dans vos points de terminaison (sur le serveur et le client):

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

Marc

UPDATE:
Ah, oui, côté serveur, vous aurez besoin d'un certificat pour authentifier le service au client qui l'appelle, et il est également utilisé pour chiffrer et signer les messages. C’est uniquement sur le serveur. Les clients n’ont rien à installer.

Configuration:

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

Assurez-vous d'installer le certificat de votre serveur dans le " Ordinateur local " dossier sur votre serveur, sous le "sujet" que vous spécifiez dans votre configuration.

Autres conseils

Vous pouvez essayer d’abord quelque chose. Définissez serviceNegotiationCredentials sur true:

<message negotiateServiceCredential="true"/>

Ceci créera une conversation sécurisée entre votre client et votre service sans contrôleur de domaine.

MAIS, s'il n'y a pas de contrôleur de domaine, le client ne fait pas confiance à votre service, il échouera donc.

Vous devez donc définir la identité du service attendue. Vous pouvez trouver cela dans le WSDL de votre service. Par défaut, si vous êtes hébergé sur IIS, il semble que ce soit:

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

Je ne pense pas que vous en aurez besoin, mais vous devrez peut-être autoriser la connexion anonyme du côté service:

<serviceBehaviors>
    <behavior>
        <serviceCredentials>
            <windowsAuthentication allowAnonymousLogons="true"/>
        </serviceCredentials>
    </behavior>
</serviceBehaviors>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top