2014-07-10 2 views
0

jQuery를 사용하여 대화 할 수있는 CakePHP API에서 기본 인증을 사용하려고합니다. 이 코드를 실행기본 인증이 상태 비 저장되지 않음

잘 작동합니다 :

$.ajax({ 
     type: 'GET', 
     url: 'http://username:[email protected]', 
     dataType: 'jsonp', 
     success: function(data) { 
       console.log(data); 
     } 
}); 

참고 : 그렇지 않으면 헤더 등, beforeSend를 사용하여 다음 데이터 형식으로 JSONP를 사용하여 전송되지 않기 때문에 나는 URL에 사용자 이름과 암호를 넣어

그러나, 그 위를 실행 한 후 위의 교체로이 코드를 실행하기는 (통지 내가 더 이상 사용자 이름과 암호를 전송하고 있지 않다) 작동합니다.

$.ajax({ 
     type: 'GET', 
     url: 'http://domain.com', 
     dataType: 'jsonp', 
     success: function(data) { 
       console.log(data); 
     } 
}); 

브라우저가 사용자를 기억하므로 코드가 더 이상 헤더를 CakePHP API에 요청하지 않아도됩니다. 그러나 그것이 무국적자라면 ...이 일이 올바르게 진행되어서는 안됩니다.

기본 인증을 요청할 때마다 헤더를 보내야한다고 생각 했습니까?

누구든지 설명 할 수 있습니까?

답변

0

당신 는 비 저장하는 API의 형태로 이해 할 수 있도록해야하지만, 기본 인증은 브라우저를 통해 보호 된 리소스에 액세스하기 위해 일반 요청을 사용할 수 있기 때문에이 표준으로하지 필수입니다.

일반적인 인증과 마찬가지로 코드가 사용자에게 후속 요청을 기억하는 세션을 설정할 수 있습니다. 쿠키 응답을 찾거나 전체 코드를 추가하십시오.

자격증 명이 암호화되지 않은 요청의 일부로 보내지기 때문에 Basic auth와 http (SSL없이)는 재앙에 해당합니다.

+0

어떻게 CakePHP의 기본 인증을 상태 비 저장으로 설정합니까? 내가 (장애인 인) 세션의 경우가 아니라 다른 것의 인상을 받았다. – Cameron

0

첫 번째 요청에서 서버는 실제로 응답 헤더에 WWW-Authenticate 필드를 발급하고 올바른 사용자 이름과 암호를 입력하라는 인증 인증을 사용자에게 응답합니다. 귀하의 경우에는 URL에 포함 시켰습니다.

다음 번에 요청을 서버에 다시 보내면 클라이언트의 요청 헤더에 여기에 포함 된 권한 필드 (예 : Authorization: Basic c2RmZ2RmZzpkYWRmZHNmcw==)가 포함됩니다. c2RmZ2RmZzpkYWRmZHNmcw==은 기본적으로 클라이언트가 모든 후속 요청에 대해 헤더에 포함하는 기본 64 인코딩 된 문자열이므로 서버가 매번 요청 인증으로 응답하지 않습니다. 문자열에 기본 64 디코드를 수행하면 기본적으로 값이 <username>:<password> 형식의 사용자 이름과 비밀번호 (즉, dfgdfg:dadfdsfs)의 조합임을 알 수 있습니다.

이제 브라우저를 닫으려고하면 권한 부여 필드가 삭제되고 요청을 다시 시도하면 서버에서 올바른 사용자 이름과 암호를 다시 묻습니다. 실제로 사용자 이름과 암호를 URL에 일반 텍스트로 포함시키지 않아도됩니다. 요청 헤더에 Authorization 필드 만 포함하면됩니다. : : 값이 기본 64로 정확하게 인코딩되어 있고 Basic 유형이 포함되어 있는지 확인하십시오.

+0

하지만 페이지를 새로 고치면 이전 요청을 잊어 버려야합니까? 그렇지 않으면 이것은 stateless가 아닙니다.기본 인증은 무국적이어야합니다. – Cameron

+0

HTTP는 상태 비 저장이므로 클라이언트가 인증 HTTP 헤더 필드를 반복해서 보내야하는 이유입니다. –

+0

JS 코드에 없으면 왜 보내는 것입니까? 즉, 권한이 부여 된 사용자를 기억합니다. – Cameron

관련 문제