ASMX 웹 서비스에 대한 액세스를 제한하는 방법이 있습니까?asmx 페이지와 해당 WSDL?

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

문제

액세스를 제한해야 하는 C# .net 웹 서비스가 있습니다.이미 소비자에게 서비스를 호출하려면 사용자 이름과 비밀번호를 사용하도록 요구하고 있습니다.하지만 실제 asmx 페이지와 WSDL에 대한 액세스를 제한하는 방법이 있습니까?사용자 이름/비밀번호 및 IP 주소로 웹 서비스에 대한 액세스를 제한해야 합니다.사용자가 올바른 자격 증명을 갖고 있지 않은 경우 웹 서비스에 어떤 웹 메서드가 있는지 알리고 싶지 않습니다.

IIS를 통해 이 작업을 수행할 수 있습니까?IIS를 통해 IP 주소를 제한할 수 있다는 것을 알고 있지만 사용자 이름/비밀번호도 사용할 수 있습니까?

IIS 외부에서 C#.net을 사용하여 이 작업을 수행할 수 있는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

음, ASMX이기 때문에 전체 ASP.NET 런타임 스택을 마음대로 사용할 수 있습니다.

1단계 - .config를 통해 리소스 관리

적용하다 <location> 보호하려는 리소스에 대한 태그를 지정하세요.단일 ASMX 파일이라고 가정하면 web.config에서 간단히 다음을 수행할 수 있습니다.

<location path="MyWebService.asmx">
    <system.web>
        <!-- resource specific options will go here -->
    </system.web>
</location>

2단계 - 사용자 인증

실제로 사용자를 인증할 방법을 결정해야 합니다.이를 수행하는 방법에는 여러 가지가 있으며 활용할 수 있는 여러 인증 표준이 있습니다.귀하에게 적합한 접근 방식을 선택해야 합니다.

인트라넷에 있고 Windows 인증을 사용하는 경우 이를 활용하는 것이 가장 간단한 설정 옵션이므로 활용하는 것이 좋습니다.그러나 인터넷을 통해 서비스에 액세스하는 경우 Windows 인증은 실제로 옵션이 아니며 웹 표준 중에서 선택해야 합니다.그 중 가장 간단한 것은 기본 인증, 하지만 당신은해야 오직 사용자 이름/비밀번호는 암호화되지 않으므로 SSL을 통해 이를 사용하십시오(base64로만 인코딩됨).그 다음 단계는 다이제스트 인증 사용자 이름/비밀번호는 MD5 해시를 사용하여 전송되므로 SSL이 필요하지 않습니다.궁극기를 위해 당신은 함께 갈 수 있습니다 SSL v3 여기서는 API의 각 사용자에게 특정 클라이언트 인증서를 발급합니다.

이제 보안을 위해 어떤 옵션을 선택하느냐에 따라 추가로 수행해야 할 작업이 결정됩니다.Windows 보안을 선택하는 경우 다음 요소를 추가하기만 하면 됩니다. <system.web> 1단계에서 시작한 요소:

<authentication mode="Windows" />

나머지 보안 프로토콜에는 약간의 작업이 더 필요할 것입니다.ASP.NET은 Basic, Digest 또는 SSL v3에 대한 기본 지원을 제공하지 않습니다.기술적으로는 IIS를 활용하여 이러한 유형의 인증을 수행할 수 있지만 항상 Windows 사용자에게 매핑됩니다.그것이 당신을 위한 선택이라면, 그냥 떠나십시오. <authentication mode="Windows" /> 요소를 선택하고 이에 따라 IIS를 구성합니다.그러나 단순히 IIS/ActiveDirectory를 제어할 수 없거나 사용자 지정 사용자 데이터베이스에 대해 인증해야 하기 때문에 이것이 옵션이 아닌 경우 이는 이러한 보안에 대한 지원을 제공하기 위해 사용자 지정 HttpModule을 연결해야 함을 의미합니다. 프로토콜.

3단계 - 리소스 확보

리소스를 확보하는 가장 간단한 접근 방식은 기본적으로 다음과 같이 말하는 것입니다."어떤 식으로든 성공적으로 인증되지 않은 사람은 이 리소스에 들어가지 못하게 하세요."이는 다음 인증 구성을 사용하여 수행됩니다.

<authorization>
    <deny users="?" />
</authorization>

만 허용하고 싶다면 확실한 대신 다음을 수행하도록 사용자를 변경할 수 있습니다.

<authorization>
    <deny users="*" />
    <allow users="jdoe, msmith" />
</authorization>

또 다른 접근 방식은 역할(그룹)을 정의하고 리소스에 액세스하려는 사용자를 배치하는 특별한 역할에 리소스를 잠그는 것입니다.

<authorization>
    <deny users="*" />
    <allow roles="My Service Users" />
</authorization>

이는 Windows 그룹을 설정하고 MIS 팀이 ActiveDirectory를 사용하여 해당 그룹에 있는 사용자를 관리하도록 할 수 있기 때문에 Windows 인증에 잘 매핑됩니다.그러나 이 기능은 사용한 보안 구현이 IPrincipal 구현을 통해 역할을 노출한다고 가정할 때 Windows 이외의 인증에서도 잘 작동합니다.

다른 팁

두 가지 옵션 : 잠긴 권한이있는 다른 포트에서 완전히 다른 사이트를 만듭니다. 이는 어느 정도의 "모호함을 통한 보안"(반 농담 ...)을 제공한다는 장점이 있거나 다른 앱 풀에 사이트 (동일한 포트, 다른 경로)에 새 응용 프로그램을 추가하고 그러한 방식으로 권한을 할당 할 수 있습니다.

두 경우 모두 웹 서비스는 애플리케이션 객체와 같은 다양한 ASP.NET "Things"와 대화 할 수 없습니다 (음이 동일하지는 않지만). 배포는 약간 더 어렵습니다. 동일한 바이너리를 배포하지만 하나의 웹 서비스 파일 만 포함합니다.

httpmodule을 사용하여 인증 할 수 있습니다. SSL + Basicauthentication은 다른 도구 체인과 가장 잘 상호 연락을 취해야합니다.

httpmodule에서 요청에 액세스 할 수 있으며, Unexectored 사용자가 .asmx 요청에 대한 액세스를 거부 할 수 있습니다. 그리고 심지어 당신은 그들이 WSDL에 액세스하게 할 수 있습니다.

추가하다 <add path="*.asmx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> ~로 <httpHandlers> web.config 파일의 섹션

이것이 당신에게 얼마나 실용적인지는 모르겠지만 WCF로 업그레이드하는 것을 고려할 수 있습니다. WCF는 ASMX 웹 서비스와 완전히 호환되며 MEX (메타 데이터 교환) 엔드 포인트를 정의하여 WSDL이 노출되는지 여부를 제어 할 수 있습니다. MEX 종말점, WSDL 없음.

machine.config의 요소에서 문서 프로토콜을 제거하여 WSDL이 표시되는 것을 중지 할 수 있습니다.

업데이트:웹 서비스 인증 - 모범 사례?사용자에게 사용자 이름/암호가있는 경우 HTTP를 통해 HTTP 기본 인증을 사용할 수 있습니다.

약간 다른 방식으로 구현할 수도 있습니다. 웹 서비스에 대한 첫 번째 호출은 인증 방법이어야합니다. 클라이언트는 인증 토큰을 인증하고받습니다. 이 토큰은 웹 서비스에서 노출 된 다른 모든 방법에 제시해야합니다.

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