2009-08-05 3 views
1

공개적으로 공개하고 싶은 매우 간단한 WCF 서비스가 있습니다. 나는 서비스를 만들었고 우리의 서버를 통해 번거롭지 않게 설치했다. 문제는 사설망 내에서 서비스를 사용할 수 있지만 네트워크 외부에서 서비스를 사용하려고하면 다음과 같은 오류가 발생합니다.WCF 인증 문제

보안 지원 공급자 인터페이스 (SSPI) 협상 실패한.

약간의 연구를했는데 기본적으로 WCF는 Windows 인증을 사용합니다. 나는 인증을 사용하지 않기 위해 그것을 변경하고 싶지만 어떻게 확신 할 수는 없다. 내 설정이 지금 보이는 방법은 다음과 같습니다.

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior" 
     name="XX.ZZ.WebService.MyService"> 
      <endpoint address="" binding="wsHttpBinding" contract="XX.ZZ.WebService.IMyService"> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="XX.ZZ.WebService.MyServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

나는 올바른 방향으로 약간의 포인터 또는 너지를 사용합니다.

답변

6

서비스는 wsHttpBinding을 사용합니다. 기본적으로 외부 사용자에게는없는 Windows 사용자 자격 증명이 필요합니다. 기본적으로 Windows 자격 증명을 사용하는 WCF 자체는 아니지만 실제로이 특정 바인딩 (wsHttpBinding)은 다른 설정을 기본으로 할 수 있습니다. (오히려 "무거운 무게"입니다)

  • 구성에있는 wsHttpBinding 전혀 보안을 사용하지 않으려면, 또는 발신자가 제공해야하는 사용자 이름/암호 보안을 사용하도록 :

    당신은 선택의 몇 가지있다 대신 보안없이

  • 사용은 BasicHttpBinding (즉 기본적으로 ASMX 모델입니다)

이있는 wsHttpBinding에서 완전히 보안을 해제하려면, 사용자의 설정이 포함됩니다

<bindings> 
    <wsHttpBinding> 
    <binding name="NoSecurity"> 
     <security mode="None" /> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

하고 엔드 포인트를 구성 그 바인딩 구성 사용 : 당신은 <basicHttpBinding> 대신 <wsHttpBinding> 원하는 경우와 동일한 기능을 수행 할 수

<system.serviceModel> 
    <services> 
     <service name="XX.ZZ.WebService.MyService" 
       behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior"> 
      <endpoint address="" 
        binding="wsHttpBinding" 
        bindingConfiguration="NoSecurity" 
        contract="XX.ZZ.WebService.IMyService"> 
      </endpoint> 
      <endpoint address="mex" 
         binding="mexHttpBinding" 
         contract="IMetadataExchange" /> 
     </service> 
    </services> 

을 (당신이 설정되어있는 경우,은 BasicHttpBinding 대있는 wsHttpBinding 사용에 아무런 효과가 없습니다 off 보안 및 wsHttpBinding이 제공하는 다른 모든 고급 기능).

WCF 보안의 기본에 대해 5 가지의 다른 전형적인 시나리오 (훌륭한 읽기)에 관해 이야기하는 정말 좋은 내용이 있습니다. blog post series!

마크는

+0

같은 이슈를 경험해보십시오. "아무런 이점도 없지만"누군가 wsHttpBinding을 사용하고자하는 이유가 있습니다. http://stackoverflow.com/questions/2106715/basichttpbinding-vs-wshttpbinding –

2

WCF는 구성과 관련하여 매우 고통 스러울 수 있습니다. WCFSecurity을 살펴보면 다양한 구성 환경에 적합한 작동 샘플을 제공합니다.

+0

내 대답에서 언급 한 블로그 게시물을 확인하십시오. 정말 도움이되며 WCF 보안을 5 가지 시나리오 중 하나를 선택하는 것처럼 쉽게 만듭니다. :-) –

+0

블로그 게시물은 괜찮지 만 기본적인 경우 만 다루고 있습니다.WCF 보안 지침은 훨씬 더 자세하게 다루어 져 있으며 주제를 자세히 다루고 있습니다. – Ray

+1

요점은 다음과 같습니다.이 블로그 게시물은 유스 케이스의 90 %를 차지하는 기본적인 5 가지 시나리오를 다루고 있습니다. WCF 보안 가이드 라인에는 가능한 모든 기능 조합이 포함되어 있지만 실제로 필요한 기능은 무엇입니까? 그들은 모든 것을 다루고 있기 때문에, 이것은 아마도 당신이 안으로 빠져 들어갈 수있는 풍부한 정보입니다 ..... –

2

이없이 인증을 당신에게 전송 수준의 보안을 제공합니다

<configuration> <system.serviceModel> 
    <services> 
     <service 
      name="Microsoft.ServiceModel.Samples.CalculatorService" 
      behaviorConfiguration="CalculatorServiceBehavior"> 
     <endpoint address="" 
        binding="wsHttpBinding" 
        bindingConfiguration="Binding1" 
        contract="Microsoft.ServiceModel.Samples.ICalculator" /> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="Binding1"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None"/> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="CalculatorServiceBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> </system.serviceModel> 
</configuration> 

다른 시나리오 나는 Microsoft WCF samples을 살펴 것이다.

+0

인증서없이 전송 보안을 확보하는 방법을 알려주시겠습니까? 이 대답은 말이되지 않습니다. – SomeRandomName