2012-07-26 4 views
2

Javascript 클라이언트가 사용할 수있는 WCF 서비스를 보호하는 방법은 무엇입니까? 이에 대한 특정 보안 모델은 무엇입니까?WCF 서비스 클라이언트가 Javascript 클라이언트가 될 수있는 경우의 보안

내가 이해하는 것은 WCF입니다. 전송 및 메시지 보안을 사용하여 유선을 통한 데이터 암호화를 지원합니다. 그러나 WCF는 누구나 서비스를 사용할 수 있기 때문에 여전히 안전하지 않습니다 (인증 누락). "앞뒤로 움직이는"데이터 만 채널을 통해 암호화됩니다. 어느 것이 충분하지 않습니다. 그래서 우리는 상호 인증과 choosed Certificate를 cridential으로 소개했습니다. 클라이언트가해야 할 일은 : 모든 SOAP 요청과 함께 유효한 인증서 (클라이언트 기밀에는 공개 키와 개인 키가 포함되어 있으며 WCF 관리자가 발급 한 인증서)를 보내야합니다. 내 서버가 신뢰하는 CA에서 발급 한

우리는 클라이언트가 Javascript/Ipad/.Net/DBL 클라이언트 일 수 있기 때문에 basicHttpBinding을 사용하고 있습니다. 우리는 .Net/SOAPUI/JAVA 클라이언트를 사용하여 이러한 서비스를 사용할 수 있습니다. 그래서 우리는이 접근법에 능숙했습니다.

하지만 오늘 분석에서 우리는 JavaScript 클라이언트가 상호 인증을 지원하지 않기 때문에 JavaScript 클라이언트가 Google 서비스를 사용할 수 없음을 발견했습니다. 상호 인증을 지원하고 유효한 인증서를 서버에 게시하더라도 모든 클라이언트 (웹 브라우저)에 공개 키와 개인 키가 포함되어 있으므로 클라이언트 인증서를 제공 할 수 없습니다 (개인 키도 알아 두십시오!). 내 서버가 맹목적으로 신뢰합니다.

이제 혼란 스러워요. 보안상의 타협없이 JavaScript가 지원하는 보안 모델을 제안 할 수 있습니까? RESTful WCF와 같은 것.

JavaScript가 Message Security를 ​​지원하지 않으며 전송 보안 만 지원한다는 사실을 알고 있습니다. 데이터가 어떻게 암호화되는지는 신경 쓰지 않습니다. 클라이언트가 내 WCF 서비스에서 인증받는 방법이 중요합니다.

많은 감사

+0

를 (누군가를 도와 희망) 아마존과 같은 많은 서비스 제공자에 의해 사용되는 인증을 위해 HMAC 알고리즘을 사용하십시오 ... – Rajesh

답변

2

을 당신은 이미 당신이 필요로 AspNetCompatibilityRequirementsMode을 활성화하여 FormAuthentication 쿠키를 확인하기 위해 ASP.NET의 pipline을 활용할 수 있습니다, 귀하의 웹 사이트에 대한 양식 인증을 사용하는 경우. 이에 대한 자세한 내용은 다음에서 확인할 수 있습니다 SO thread

서비스가 독립 실행 형 서비스이고 사용자가 제어 권한이없는 여러 클라이언트에서 사용중인 경우 oauth 인증을 사용하여 소비자 비밀이 있음 모든 인증 된 클라이언트에 공유되는 키 발신자는이 키를 사용하여 정보에 서명하고 서버는 동일한 키를 사용하여 서명 한 다음 비교합니다. 구현 자세한 내용은이 excellent article

+0

폼 인증을위한 웹 사이트가 없습니다 ... JavaScript 클라이언트 (HTML 페이지)가 REST WCF를 호출합니다 :-) 링크 클라이언트와 서버가 .Net에있을 때 OAuth를 사용하는 방법을 설명합니다. 서버가 WCF이고 클라이언트가 JavaScript가 될 예제를위한 힌트 ... 그러나 하나를 얻지 못하는 중 ... JS 클라이언트에 대한 예제가 있다면 공유하십시오 ... 감사합니다 .-) – user1312242

0

보고 오, 제발 내가 ... 내가 지금까지 IS 할 수있는 무슨 ... 가나 즉, OAuth를 제안하는 구성 요소에 R & D를하고있는 중이 참조 : 이상으로 WebHttpBinding 끝점을 노출 SSL과 자바 스크립트 클라이언트는 JSONP를 사용하여 $ Ajax를 사용하여 SSL 보안 서비스를 호출 할 수 있습니다 ... 이것은 채널이 암호화되었음을 의미합니다. 이제는 WCF에서 OAuth를 적용해야합니다 ... Javascript 클라이언트 OAuth를 이해할 수 있을까요? 내가 여기에 (http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs)에서 다운로드 한 OAuth에 대한 서버 코드가 있지만 자바 스크립트를 사용하여 이러한 서비스를 호출하는 방법은 무엇입니까? 나는 parllely이 시점에서 R & D하고 있고 내가 어떤 ansower 얻을 경우 게시 할 예정이다.여기

가 누군가 도움이 SSL 구성을 통해 내 REST WCF 희망 :

<?xml version="1.0"?> 

<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="jsonpSsl" crossDomainScriptAccessEnabled="true"> 
      <security mode="Transport" /> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="JsonServiceBehaviors"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceMetadata httpsGetEnabled="true"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="webHttpBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <services> 
     <service name="WCFTransportSecurity.TransportSecurityService" behaviorConfiguration="JsonServiceBehaviors"> 
     <endpoint address="" binding="webHttpBinding" bindingConfiguration="jsonpSsl" contract="WCFTransportSecurity.ITransportSecurityService" behaviorConfiguration="webHttpBehavior"/> 
     </service> 
    </services> 
    </system.serviceModel> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

을 그리고 여기에 서비스에 JQuery와 AJAX 호출 당신이 시도 할 수

$.ajax(
      { 
       type: "GET", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "jsonp", 
       url: "https://localhost/WCFTransportSecurity/TransportSecurityService.svc/getdata/" + $("#TextBox1").val(), 
       success: function (a) { $("#lblResponse").text(a); }, 
       error: function (a) {$("#lblResponse").html("Error while Processing: Error Code: " + a.status + "<br/>and Error Message: <span style='color:red'>" + a.statusText + "</span>"); } 
      }); 
관련 문제