Maintenir la liaison MEX non sécurisée lors de la sécurisation de la liaison HTTP avec UsernamePasswordValidator?

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

  •  10-07-2019
  •  | 
  •  

Question

Nous utilisons UsernamePasswordValidator avec un certificat pour sécuriser l'accès à nos services WCF.

Toutefois, les stratégies d'autorisation personnalisées que nous utilisons sont des comportements SERVICE, et non des comportements de point de terminaison. Elles s'appliquent donc à tous les points de terminaison, y compris le point de terminaison MEX. Nous aimerions pouvoir récupérer les références de service à l'aide de visual studio sans avoir à commenter les comportements de service à chaque fois, mais étant donné que les points de terminaison mex et wshttp sont sécurisés, un message d'erreur "Ajouter un service" s'affiche. Référence .. "

Y at-il un moyen de contourner cela?

Était-ce utile?

La solution

Utilisez-vous la même liaison sur les deux? Si tel est le cas, essayez deux liaisons distinctes: une pour l'extrémité mex et une pour wshttp:

Donc pour le service - quelque chose comme:

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

et pour le noeud final mex (pas de sécurité):

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

Les points de terminaison de service auront quelque chose comme:

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

Avec cette configuration, la sécurité n'est pas appliquée pour mex. Vous ne devez donc pas recevoir ce message lorsque vous essayez de mettre à jour la référence de service. Soit cela, soit créer une autre liaison sécurisée utilisant des informations d’identification différentes, c’est-à-dire un certificat client sur votre ordinateur.

Le message MSDN suivant contient un exemple de ce message et plus encore. Vous trouverez des informations sur ce blog sur la sécurité au Mexique points de terminaison.

Autres conseils

Je pense que d'après la question, il a également noté qu'il utilisait les comportements de service. La configuration de la liaison ne fera donc aucune différence, car l'ensemble du service utilise le validateur UserNamePassword.

Deux choses me viennent à l’esprit ici.

Supprimez la liaison mex explicite et ajoutez des comportements sous le service

<serviceMetadata httpsGetEnabled="true" />

Ou conservez la liaison mex et activez

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator n'est pas exécuté lors de la demande de métadonnées, Donc, si httpsgetenabled n’est pas activé et que vous avez une liaison mex sur http, il vous faut httpGetenabled au moins

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top