2012-03-16 4 views
0

통해서만 접근 가능 :이 서비스는 일부 상호 운용성을 허용하도록 설정되어ASP.net - 웹 서비스 - I 사이트에서 폴더 내에서 웹 서비스의 집합을 노출 사이트 일하고 로컬 호스트

services 
--- servicea.asmx 
--- serviceb.asmx 

우리가 통제하는 다른 사이트는 모두 동일한 서버에 있습니다.

사이트에서 asp.net 양식 기반 인증을 사용하지만 서비스 폴더가이 서비스에서 제외되었으며 메서드를 호출 할 때 각 서비스에서 자체 인증을 수행하고 로컬 주소에서만 액세스 한 것인지 확인합니다. 벌금.

그러나 외부 주소에서 services/servicea.asmx에 액세스하는 경우 계속 사용할 수있는 방법 목록을 볼 수 있습니다. 효과적으로 외부 주소에서 이러한 메서드 중 하나를 호출 할 수는 없지만 이처럼 내부 API를 공개하는 것은 쉽지 않습니다. 상자 외부에서 액세스 할 때 asmx 파일이 메소드 목록에 응답하지 못하도록하는 방법이 있습니까?

답변

1

당신은 당신의 Web.config에 다음을 추가 할 수 있어야한다 :

<system.web.services> 
    <protocols> 
     <remove name="Documentation"/> 
    </protocols> 
</system.web.services> 

이 서비스 설명 페이지를 숨겨야합니다.

자세한 내용은 http://msdn.microsoft.com/en-us/library/b2c0ew36%28v=vs.100%29.aspx을 참조하십시오. 이는 또한 클라이언트가 WSDL 프록시 클래스를 생성하지 못하게하므로 구현이 쉽지 않을 수 있습니다.

메소드 이름을 숨기는 것은 보안을 대체 할 수 없으므로이를 수행해야하는지 여부를 고려해야합니다.

+0

서비스 수준별로이 작업을 수행 할 수있는 방법이 있는지 알고 계십니까? 외부에 액세스 할 수있는 다른 항목이 있습니다. – Paddy

+0

한 가지 아이디어는 location 요소를 사용하는 것입니다 : http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.100%29.aspx - 위의 블록을 예를 들어 요소가 있지만이 문서가 작동하지 않는다고 말하는 어떤 참조도 찾을 수 없습니다. 그렇지 않으면 각 가상 디렉터리를 고유 한 가상 디렉터리 또는 유사한 디렉터리에 둘 필요가 있으므로 서로 효율적으로 격리됩니다. – dash