¿Mantener el enlace MEX inseguro mientras se asegura el enlace HTTP con UsernamePasswordValidator?

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

  •  10-07-2019
  •  | 
  •  

Pregunta

Estamos usando UsernamePasswordValidator junto con un certificado para asegurar el acceso a nuestros servicios WCF.

Sin embargo, las políticas de autorización personalizadas que estamos utilizando son comportamientos de SERVICIO, no comportamientos de punto final, por lo que se aplican a todos los puntos finales, incluido el punto final MEX. Nos gustaría poder ir y tomar las referencias del servicio utilizando Visual Studio sin tener que comentar los comportamientos del servicio cada vez, pero dado que tanto el punto final mex como el wshttp están asegurados, obtenemos un error al hacer " Agregar servicio Referencia .. "

¿Hay alguna forma de evitar esto?

¿Fue útil?

Solución

¿Está utilizando el mismo enlace en ambos? Si es así, intente 2 enlaces separados, uno para el punto final mex y otro para el wshttp:

Entonces, para el servicio, algo como:

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

y para el punto final mex (sin seguridad):

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

Los puntos finales de servicio serán algo así como:

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

Con esta configuración, no está aplicando la seguridad para mex, por lo que no debería recibir ese mensaje al intentar actualizar la referencia del servicio. O eso, o cree otro enlace seguro que use diferentes credenciales, es decir, un certificado de cliente en su máquina.

La siguiente MSDN tiene una muestra de esto y más se puede encontrar información en este blog sobre mex seguro puntos finales.

Otros consejos

Creo que de la pregunta también notó que estaba usando Comportamientos de servicio, por lo que la configuración de enlace no hará una diferencia, ya que todo el servicio usa el Validador de contraseña de nombre de usuario.

Aquí me vienen a la mente dos cosas.

Eliminar el enlace mex explícito y agregar bajo comportamientos de servicio

<serviceMetadata httpsGetEnabled="true" />

O mantenga el enlace mex y habilite

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator no se ejecuta al solicitar metadatos, así que si httpsgetenabled no está activado y tienes un enlace mex en http, necesitas httpGetenabled en al menos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top