2009-12-14 2 views
2

내 응용 프로그램 만 액세스 할 수 있도록하려는 WCF 서비스가 있습니다. 내 응용 프로그램은 JQuery와 Silverlight 인터페이스를 사용하는 전통적인 웹 인터페이스로 구성됩니다. 이러한 인터페이스 중 어느 것도 사용자가 로그인해야합니다.WCF - 권한이없는 클라이언트 방지

내 도메인에서 시작된 클라이언트 만 허용하도록 WCF 서비스에 알릴 수있는 방법이 있습니까? 그렇다면 어떻게?

감사합니다.

답변

2

물론 가능합니다. 발신자가 Windows 자격증 명 (도메인의 Active Directory 계정) 만 있으면됩니다.

도메인에 대해 인증되지 않은 사용자는 거부됩니다.

당신은 메시지 보안에있는 wsHttpBinding은 (모든 회사 방화벽 뒤에있는 경우), 또는 전송 보안과 netTcpBinding 중 하나를 지정하여이 작업을 수행 할 수 있습니다 : 이제

<bindings> 
    <netTcpBinding> 
     <binding name="DomainUsersOnly"> 
     <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
     </security> 
     </binding> 
    </netTcpBinding> 
    <wsHttpBinding> 
     <binding name="HttpDomainUsersOnly"> 
     <security mode="Message"> 
      <message clientCredentialType="Windows" /> 
     </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

, 당신이해야 할 모든 사람들의 기준이다 종단점의 바인딩 구성 :

<endpoint name="whatever" 
      address="......" 
      binding="netTcpBinding" 
      bindingConfiguration="DomainUsersOnly" 
      contract="IYourservice" /> 

당신은 잘해야합니다.

+0

여기에주의하십시오. 사용자가 도메인 사용자와 동일한 사용자 이름과 암호를 가지고 있으면 (나는 알지만) 도메인 사용자로 인증 될 것입니다. –

+0

아니요, 실제 Windows 자격 증명이 있어야합니다. 도메인의 Windows 보안 토큰은 우연히 동일한 이름이 아닙니다. –

+0

그럼 어떻게 테이블의 세 번째 열을 여기에 설명 하시겠습니까? http://msdn.microsoft.com/en-us/library/ms164725.aspx –

0

IIS에서 보안 제한을 추가하여 도메인에서 webservice 로의 호출 만 허용 할 수 있습니다.

0

windows auth (도메인에서 요청이 들어 왔기 때문에)를 고려하지 않는 한,이 작업을 수행하는 기본 방법은 방화벽을 통해 다른 수준이됩니다. 이 수준에서 들어오는 트래픽을 알려진 IP 주소 집합으로 제한 할 수 있습니다. 이것은 IP가 스푸핑 될 수 있기 때문에 지금까지만 진행될 것입니다.하지만 이것은 개방형 서비스이므로 여기에 있습니다. 더 나은 대안은 firewalls 및 windows auth입니다.

또는 OperationContext.Current.IncomingMessageProperties을 쿼리하여 WCF의 클라이언트 IP 주소를 확인할 수 있습니다.

1

모든 합법적 인 사용자가 내부 회사 LAN (동일한 서브넷)에 있어야하는 경우 this과 같은 방법을 사용하여 IP 주소로 잠글 수 있습니다. 원하는 경우 여러 특정 IP 마스크까지 클램프 할 수도 있습니다.

하지만 합법적 인 사용자가 어디서나 공격 할 수 있도록 허용하려는 경우에는 좋은 방법이 아닙니다. 이 경우 인증이 더 좋습니다.