2010-03-16 10 views
5

인증 쿠키에 HTTP 기본 인증 헤더 라인을 저장하므로 이후 요청에서 인증 헤더를 처리 할 필요가 없습니다. (jQuery를 사용하고 있습니다) :Ajax : HTTP 기본 인증 및 인증 쿠키

authenticate: function(auth) { 
    var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password); 
    document.cookie = "Authorization: " + header; 
    $.ajax({ 
     type: "GET", 
     url: "http://someurl", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: auth.success, 
     error: auth.error 
    }); 
}, 

로그인하는 첫 번째 사용자에게는 작동하는 것처럼 보이지만 이후의 인증 헤더가 추가되고 덮어 쓰이지 않으므로 브라우저 세션 내 다른 사용자에게는 작동하지 않습니다. name=value 구문을 사용하여 쿠키를 덮어 쓸 수 있지만이 구문은 인증 헤더에 적용되지 않습니다.

새 사용자가 로그인하면 이전 승인 헤더를 제거 할 수있는 방법이 있습니까?

도움을 주시면 감사하겠습니다. 고마워, 제 호

+0

서버 측 코드를 변경할 수 있습니까? 어떤 언어 (PHP, Python 등)를 사용하고 있습니까? – bpedro

+0

서버 측은 자체 호스팅 (WebServiceHost) wcf 데이터 서비스 (C#으로 작성)입니다. 나는이 호스트의 소유자이므로 변경할 수 있습니다. 그러나 가능성은 제한되어 있습니다. – Jeldrik

답변

11

첫 번째 사용자에게도 문제가되지 않는 것 같습니다. 문제는 인증 헤더가 이전에 브라우저에 의해 설정되었을 가능성이 있다는 것입니다 (브라우저의 인증 대화 상자를 사용했을 때).

지금 내가하고있는 일은 로그인 정보를 표준 이름 = 값 쿠키에 저장하고 인증 헤더를 수동으로 설정하는 것입니다.

var header = "Basic " + $.base64.encode(auth.username + ":" + auth.password); 
document.cookie = "Authorization=" + header; 

쿠키 읽기 :

function getAuthCookie() { 
    var cn = "Authorization="; 
    var idx = document.cookie.indexOf(cn) 

    if (idx != -1) { 
     var end = document.cookie.indexOf(";", idx + 1); 
     if (end == -1) end = document.cookie.length; 
     return unescape(document.cookie.substring(idx + cn.length, end)); 
    } else { 
     return ""; 
    } 
} 

설정 인증 헤더 :

는 쿠키를 설정

$.ajax({ 
     type: "GET", 
     url: "http://someurl", 
     contentType: "application/json; charset=utf-8", 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", getAuthCookie()); 
     }, 
     dataType: "json", 
     success: auth.success, 
     error: auth.error 
    }); 

이 조금 어색한 것 같다,하지만 그것을 작동합니다.