2010-08-18 7 views
4

클라이언트 측에서 호출해야하는 WCF 서비스가 있습니다 (아약스 호출). ASPX 페이지에서 ScriptManager를 사용하여 ServiceReference를 WCF 서비스에 추가하거나 JQuery ajax 호출을 WCF 서비스에 추가하려고합니다. 익명 사용자가 WCF 서비스에 액세스하는 것을 거부하고 싶습니다. 자바 스크립트에서 서비스 메소드를 호출하기 전에 사용자 인증을 수행 할 수있는 방법이 있습니까? 클라이언트 측에서 내 WCF 서비스 호출을 보호하는 방법은 무엇입니까?AJAX를 사용하여 WCF 서비스를 호출하는 동안 사용자를 인증하는 방법은 무엇입니까?

+0

JavaScript 내에서 사용자를 인증하려고합니까? 따라서 사용자가 인증되지 않으면 서비스 호출이 만들어지지 않습니다. 죄송합니다 귀하의 질문을 반복하는 경우,하지만 난 당신의 요구 사항을 이해하고 있는지 확인 싶었어요. 감사! –

+0

wcf 아약스 서비스는 Windows 인증, 사용자 이름/암호 인증, x509 certifcates 등의 보안 기능을 가지고 있지 않습니다. 우리는 SSL을 사용하여 전송 레벨에서 데이터를 보호해야하지만 보안 된 방법으로 내 wcf 아약스 전화를 보호하고 싶습니다. 'javascript를 사용하여 해커 또는 스푸핑 또는 내 웹 메소드의 temapring을 허용하고 싶지 않습니다. 나는 어떻게하는지 전혀 모른다. – lourdhu

+0

아래에 답변/제안을 추가했습니다. 그것이 당신이 찾고있는 것이라면 확실하지 않지만 알려주세요. 그에 따라 업데이트 할 수 있습니다. –

답변

5

WCF 서비스를 보호하기 위해 수행 할 수있는 여러 가지 작업이 있습니다. 아마도 가장 쉬운 방법은 서비스가 이미 기존 ASP.NET 응용 프로그램의 일부인 경우 서비스에 ASP.NET 호환 모드를 사용하는 것입니다. ASP.NET 응용 프로그램에서 인증 (예 : 폼 인증)을 사용하여 세션 쿠키를 통해 인증을 사용하는 경우 ASP.NET 호환 모드가 대부분 해당 작업을 수행합니다. 기본적으로

이이 비활성화되어 있지만, 당신은 당신의 Web.config에 추가로 설정할 수 있습니다 :

<system.serviceModel> 
     ... 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
     ... 
</system.serviceModel> 

이 응용 프로그램의 모든 서비스에 대한 호환성 모드를 사용합니다. 이 설정을 사용하면

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class FooService: IFooService { 
} 

, 당신은에 액세스 할 수 있습니다 또한 Web.config의 값을 설정하고 또한 서비스 클래스가 아닌 인터페이스)에 AspNetCompatibilityRequirements 특성을 사용하여 서비스별로 서비스에서이를 활성화 할 수 있습니다 HttpContext.Current (ASP.NET 페이지와 유사 함). 또한 .aspx 파일에 액세스하기 전에 인증되어야하는 것처럼 .svc 파일에 액세스하기 전에 사용자를 인증해야한다는 것을 강요합니다. 인증없이 .svc 파일에 액세스하려고하고 양식 인증을 사용하는 경우 발신자는 기본 로그인 페이지로 리디렉션되고 인증 성공 후 .svc 파일로 리디렉션됩니다.

이 제안은 몇 가지 가정한다 :

  • 당신의 서비스는 ASP.NET 응용 프로그램에를;
  • 폼 인증과 같은 몇 가지 유형의 ASP.NET 인증을 사용하여 사용자의 자격 증명을 확인하고 유효성 검사 티켓을 쿠키에 보관합니다.

이 제안은 아마도 가장 안전하지 않거나 강력한 것은 아니지만 최소한 합리적인 수준으로 사이트를 시작하고 안전하게 유지하는 것은 가장 간단합니다.

ASP.NET 호환성 모드에서는 다음과 같이 표시됩니다. MSDN library intro article

이 방법이 효과가 있다면 다음 단계는 HMAC 인증 (좀 더 많은 작업과 비밀 키의 조정이 필요합니다.하지만 분명히 안전한 IMHO입니다.)을 살펴 보는 것입니다. 구현에 대한 좋은 예가 있습니다. - http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/22/how-to-implement-hmac-authentication-on-a-restful-wcf-service.aspx

이 정보가 도움이되기를 바랍니다. 행운을 빕니다!!

+0

당신은 aspNetCompatibility에 대한 좋은 지적을했지만 내 wcf 서비스는 asp.net 웹 사이트 application.i에서 separte 프로젝트가 아니며 양식 인증을 사용하고 있지 않습니다. 나는 데이터베이스 수준에서 사용자를 확인 중입니다. 자격 증명을 전달할 세션이 있어야합니다. 데이터베이스에서의 역할 및 페이지 레벨 액세스. – lourdhu

+0

웹 사이트 프로젝트에 서비스가있을 필요는 없습니다. 프로젝트의 일부 서비스에서 asp.net과의 호환성을 사용하고 웹 프로젝트에서 참조하는 별도의 DLL에 서비스가 있습니다. –

+0

David, 호환성 모드를 유지하는 것은 좋은 생각이며 언급 한대로 HttpContext에 대한 액세스를 제공하지만 인증되지 않은 경우 서비스를 호출하는 것을 방지하지는 않습니다. – Ehsan

0

WCF 웹 HTTP 서비스 웹 종단점을 보호하는 유일한 방법은 전송 보안을 사용하여 HTTPS를 통해 노출하는 것입니다. 메시지 기반 보안을 사용할 때 보안 정보는 일반적으로 SOAP 헤더에 저장되며 비 SOAP 끝점에 보낸 메시지에는 SOAP 봉투가 없으므로 보안 정보를 배치 할 위치가 없으며 전송 보안에 의존해야합니다.

2

이것이 도움이 될지 모르겠지만 WCF와 webapp 사이에 레이어를 배치했습니다.로컬 asmx에 AJAX servicereference 호출을 할 수 있습니다. 이는 양식 인증 티켓의 보호하에있었습니다. 그런 다음 asmx는 추가 보안 검사를 수행 한 다음 (해당 특정 사용자가 데이터를 요청하거나 사용자를 기준으로 데이터를 형성하도록 허용 된 경우) 호출을 내 WCF 서비스로 전달합니다.

이렇게하면 내 서비스 계층은 각 응용 프로그램이 액세스하는 각 사용자에 대해 알 필요가 없으며 요청한 데이터를 전달하는 데에만 관심이 있습니다.

asmx webservice가 보안의 책임을 맡았습니다.

그런 다음 WAS를 사용하여 IIS에서 호스팅되는 WCF를 만들었으며 웹 응용 프로그램 풀이 실행중인 ID에 대한 Windows 인증 액세스 만 허용했습니다.

그래서 :

ASPX -> ASMX WebService를 ->

WCF

나는 그것이 당신에게 당신이 요구하는 제어/분리 및 보안을 줄 것이라고 생각하십니까?

관련 문제