-
22-07-2019 - |
문제
공개적으로 노출하고 싶은 매우 간단한 WCF 서비스가 있습니다. 서비스를 만들어 많은 번거 로움없이 서버를 통해 설정했습니다. 문제는 개인 네트워크 내에서 서비스를 사용할 수 있지만 네트워크 외부에서 서비스를 사용하려고 할 때 다음 오류가 발생한다는 것입니다.
SSPI (Security Support Provider Interface) 협상에 실패했습니다.
약간의 연구를 수행했으며 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>
나는 올바른 방향으로 약간의 포인터 나 멍청이에 감사 할 것입니다.
해결책
글쎄, 귀하의 서비스는 WSHTTPBinding을 사용합니다. WSHTTPBinding은 기본적으로 Windows 사용자 자격 증명이 필요합니다. 기본적으로 Windows 자격 증명을 사용하는 것은 WCF 자체가 아니지만 실제로이 특정 바인딩 (WSHTTPBinding) - 다른 바인딩 (WSHTTPBinding)은 다른 설정에 기본값을받을 수 있습니다.
몇 가지 선택이 있습니다.
- 보안을 전혀 사용하지 않도록 WSHTTPBINDING ( "무거운 중량")를 구성하거나 발신자가 제공 해야하는 사용자 이름/비밀번호 보안을 사용하십시오.
- 대신 보안이없는 BasichttpBinding을 사용하십시오 (기본적으로 ASMX 모델입니다)
wshttpbinding에서 보안을 완전히 끄려면 구성 에이 정보를 포함시킵니다.
<bindings>
<wsHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
그런 다음 해당 바인딩 구성을 사용하도록 엔드 포인트를 구성하십시오.
<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>
원하는 경우 (WSHTTPBinding vs. BasichttpBinding을 사용하는 데 도움이되는 이점이 없습니다. 보안 및 WSHTTPBinding이 제공하는 다른 모든 고급 기능을 끄면).
정말 좋은 것도 있습니다 블로그 게시물 시리즈 그것은 5 가지, 전형적인 시나리오 - 우수한 읽기!
마크
다른 팁
이를 통해 인증없이 운송 수준 보안을 제공합니다.
<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 샘플.
WCF는 구성과 관련하여 진정한 고통이 될 수 있습니다. 보세요 wcfsecurity 다양한 구성 환경에 적합한 작업 샘플을 제공합니다.