usernamepasswordvalidator와 함께 HTTP 바인딩을 고정하면서 MEX 결합을 안전하게 유지 하시겠습니까?

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

  •  10-07-2019
  •  | 
  •  

문제

우리는 WCF 서비스에 대한 액세스를 보장하기 위해 usernamepasswordvalidator와 함께 인증서를 사용하고 있습니다.

그러나 우리가 사용하는 사용자 정의 승인 정책은 엔드 포인트 동작이 아닌 서비스 동작이므로 MEX 엔드 포인트를 포함한 모든 엔드 포인트에 적용됩니다. 우리는 매번 서비스 동작을 언급하지 않고도 Visual Studio를 사용하여 서비스 참조를 가져갈 수 있기를 원하지만 MEX와 WSHTTP 엔드 포인트가 모두 보장되므로 서비스 참조 추가 "오류가 발생합니다. .. ""

이 주위에 어떤 방법이 있습니까?

도움이 되었습니까?

해결책

둘 다에 동일한 바인딩을 사용하고 있습니까? 그렇다면 2 개의 별도의 바인딩 - 하나는 Mex 엔드 포인트와 wshttp를 위해 하나를 시도하십시오.

서비스를 위해 -

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

그리고 MEX 엔드 포인트 (보안 없음)의 경우 :

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

서비스 엔드 포인트는 다음과 같습니다.

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

이 설정을 사용하면 MEX 보안을 적용하지 않으므로 서비스 참조를 업데이트 할 때 해당 메시지를받지 않아야합니다. 또는 다른 자격 증명, 즉 컴퓨터의 클라이언트 인증서를 사용하는 다른 보안 바인딩을 작성하십시오.

다음과 같은 MSDN 게시물에는 이것에 대한 샘플이 있으며 더 많은 정보가 있습니다. 블로그 보안 MEX 엔드 포인트와 관련하여.

다른 팁

질문에서 그는 또한 서비스 동작을 사용하고 있다고 언급했다고 생각했기 때문에 전체 서비스가 usernamepassword 유효성 검사기를 사용하기 때문에 바인딩 구성은 차이를 만들지 않을 것입니다.

여기서 두 가지가 떠 오릅니다.

명시 적 MEX 바인딩을 제거하고 서비스 행동 하에서 추가하십시오.

<serviceMetadata httpsGetEnabled="true" />

또는 MEX 바인딩을 유지하고 활성화하십시오

<serviceMetadata httpGetEnabled="true" />

메타 데이터를 요청할 때 CustomUserNameValidator가 실행되지 않으므로 httpsgetenabled가 켜져 있고 HTTP에 MEX 바인딩이 있으면 적어도 HTTPGetEabled가 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top