Mantenha inseguro ligação MEX ao mesmo tempo garantir ligação HTTP w / UserNamePasswordValidator?

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

  •  10-07-2019
  •  | 
  •  

Pergunta

Estamos usando UserNamePasswordValidator juntamente com um certificado para acesso seguro aos nossos serviços WCF.

No entanto, as políticas de autorização personalizados estamos usando são comportamentos serviço, não comportamentos de ponto final, para que eles se aplicam a todos os terminais, incluindo o ponto final MEX. Nós gostaríamos de ser capaz de ir e agarrar as referências de serviço usando o Visual Studio sem ter que comentar a comportamentos de serviços cada vez, mas uma vez que tanto o mex eo endpoint wshttp estão garantidos, teremos um erro ao fazer "Add Service Reference .. "

Existe alguma maneira de contornar isso?

Foi útil?

Solução

Você está usando a mesma vincula tanto? Se assim for, tente 2 ligações separadas - uma para o desfecho mex e um para o wshttp:

Assim, para o serviço - algo como:

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

e para o mex endpoint (sem segurança):

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

terminais de serviço será algo 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" />

Com esta configuração, não é aplicar a segurança para mex para que você não deve obter essa mensagem ao tentar referência de serviço de atualização. Ou isso, ou criar outra ligação que usa credenciais diferentes, ou seja, um certificado de cliente seguro em sua máquina.

A seguir MSDN post tem uma amostra de isso e muito mais informações podem ser encontradas neste blogue sobre mex seguro endpoints.

Outras dicas

Eu acho que a partir da pergunta que ele também observou que ele estava usando Serviço de comportamentos, de modo a configuração de ligação não vai fazer a diferença, uma vez que todo o serviço usa o UserNamePassword Validator.

Duas coisas vêm à mente aqui.

Remova ligando as mex explícitas e adicionar sob comportamentos de serviços

<serviceMetadata httpsGetEnabled="true" />

Ou mantenha o mex vinculativo, e permitir

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator does not get executado quando solicitando Metadados, por isso, se httpsgetenabled is not on, e você tem uma ligação em http mex, você precisa httpGetenabled em pelo menos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top