2011-01-06 7 views
7

jQuery와 나는 Version One Rest API을 호출 중이며 HTTP 헤더에서 사용자를 인증해야합니다. jQuery HTTP 인증

나는
$.ajax({ 
     dataType: "jsonp", 
     beforeSend: function(xhr){ 
      xhr.setRequestHeader("Authorization", "Basic xyz"); // xyz usr:pwd Base64 encoded 
     }, 
     url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...", 
     success: function(data, status, xhr) { 
      alert("Load was performed."); 
     } 
    }); 

$.ajax({ 
    dataType: "jsonp", 
    username:"usr", 
    password:"pwd", 
    url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...", 
    success: function(data, status, xhr) { 
     alert("Load was performed."); 
    } 
}); 

을 시도하지만 난 항상 내 자격 증명 (내가 크롬을 사용)을 요청하는 팝업 얻을. 팝업에 자격 증명을 입력해도 인증되지 않았으며 창이 계속 표시됩니다.

  1. HTTP 헤더에서 jQuery를 사용하여 사용자를 인증하는 방법은 무엇입니까?
  2. 암호 속성을 암호화하지 않도록하는 방법은 없습니까? 또는 Base64만이 유일한 방법입니다. 단 하나의 계정을 통해 서버에 액세스하고 싶지만 클라이언트 측의 사용자가 비밀번호를 보거나 자바 스크립트에서 찾지 못하도록하고 싶습니다.
+0

"단 하나의 계정을 통해 서버에 액세스하고 싶지만 클라이언트 측의 사용자가 암호를 볼 수 없도록하려는 경우"- 서버 측에서 암호를 가져 오지 않는 한이 방법으로는 불가능합니다. 연습). Base64 인코딩은 비밀 번호를 보이지 않게 만드는 방법이 아닙니다. 되돌리기가 쉽지 않습니다. –

+0

감사합니다. 나는 이것이 불가능하다는 것을 두려워했다. 바로 Base64에 관한 것입니다. – padis

답변

4

이것은 정확히 불가능하지 않습니다. 조금 어색합니다. 다음과 같이 자신의 서버를 통해 모든 AJAX를 프록시 할 수 있습니다.

  • JavaScript가 AJAX를 통해 서버에 연결됩니다.
  • 서버는 적절한 기본 인증 헤더 (또는 사용할 인증이 무엇이든)를 사용하여 https://www10.v1host.com/.../VersionOne/rest-1.v1/...으로 요청을 설정합니다.
  • 서버가 www10.v1host.com 서버로 보낸 것과 똑같은 응답을 스크립트에 전송합니다.

이렇게 암호를 보이지 않게 유지하고 서버에서 제어 할 수 있으며 클라이언트 코드는 www10.v1host.com에서와 동일한 API를 얻습니다. 이 방법으로 도입 된 약간의 지연이있을 수 있지만이를 관리 할 수 ​​있어야합니다.

물론 브라우저와 서버 사이의 인증 프로세스를 고려해야하지만 이미 쿠키 (예 : 쿠키 및 일반 이전 로그인)가있는 권한을 사용해야합니다.

또한 API 서비스 약관과 비교하여이 기술을 확인하여 좋은 결과를 얻고 싶습니다.

+0

고마워, 그건 좋은 생각이야. 실제로 원래 서버 측에서 Java를 통해 REST API를 호출하려고했지만 서버는 외부 네트워크에 연결할 수없는 시스템에서 실행됩니다. 클라이언트 컴퓨터는 외부로 출입 할 수 있습니다. – padis