2013-11-03 3 views
1

저는 Ember Simple Auth 플러그인과 jQuery를 사용하여 ajax를 사용하여 Authorization 헤더 크로스 도메인을 보냅니다. Authorization 헤더가 설정되어있는 경우 :HTTP 헤더 설정 권한 부여 헤더가 데이터로드를 중지합니다.

jqXHR.setRequestHeader('Authorization', 'Bearer ' + session.get('authToken')); 

그럼 내가 다음 헤더 다시 돌아가 REST URL로 비행 전 OPTIONS 요청 얻을 : 크롬 네트워크 모니터에서

$headers->set('Access-Control-Allow-Origin', 'http://subdomain2.domain.com'); 
$headers->set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
$headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, Accept'); 
$headers->set('Access-Control-Max-Age', 10); 
$headers->set('Content-Length', 0); 

을,이 OPTIONS 요청이 성공적으로 반환됩니다. GET 요청은 비행 전 OPTIONS 요청 이후에 올 때 다음, GET 요청은 중단 또는 적어도 네트워크 모니터에서 (pending) 말한다 :

enter image description here

내가 페이지를 새로 고치면 몇 초 후에 페이지 것 보여 주지만, OPTIONS 전화 바로 다음에 표시되지는 않습니다.

Access-Control-Max-Age 헤더로 재생하고 캐시 시간을 늘리면 OPTIONS 호출을 다시 보내기 전에 여러 번 새로 고침 할 수 있습니다. 즉, 페이지가 잘 표시됩니다. 전화가 걸려 오면 즉시 즉시 GET이 온다.

브라우저에서 직접 URL을로드하면 JSON 데이터가 잘 표시됩니다. Chrome 확장 우편 게시자를 사용하여 수동으로 Authorization 헤더를 jQuery 요청과 동일하게 설정하더라도 Postman이 교차 도메인 요청을 시뮬레이트하지는 않지만 데이터를 올바르게로드합니다.

GET 요청이 보류 중이고 오류 또는 헤더를 반환하지 않는 이유는 무엇입니까?

답변

2

여기에 어떤 문제가 있는지 잘 모르겠습니다. 네가 sth로 뛰고있는 것 같아. 이와 유사 : cross-origin 'Authorization'-header with jquery.ajax()

또한 Ember.SimpleAuth 코드에서 아무 것도 변경 했습니까? 기본적으로 보안상의 이유로 도메인 간 요청에 토큰이 포함되어서는 안됩니다.

또한 jQuery : Sending credentials with cross-domain posts?의 알려진 문제를 볼 수도 있습니다.이 문제는 인증 헤더 도메인 간 전송과 관련이 있습니다.

Ember.SimpleAuth가이 시나리오에서 도움이 될 수있는 방법을 살펴 보겠습니다.

+0

내가 새로 고침 경우가 작동하는 것 같다 때문에 이상한, 그래서 나는'OPTIONS' 요청 후 올바른 헤더를 반환 할. 'SimpleAuth' 코드를 변경하지 않았습니다 -'if (! jqXHR.crossDomain &&! Ember.isEmpty (session.get ('authToken'))) {'하지만'jqXHR' 객체는 'crossDomain' 속성을 포함하고 있습니다 ... 실제로 크로스 도메인 속성이'options' 객체에 있음을 발견했습니다.시스템의 버그 또는 차이점이 있습니까? 나는 일시적으로 'REST' 서버를 같은 도메인으로 변경하여 상황을 해결했습니다. 나는 이것이 SimpleAuth 이슈라고 생각하지 않는다. 아마도 버그 일 것이다. 확실하지 않다. – Wasim

+0

'Authorization' 헤더를 보내기 전에'jqXHR.withCredentials = true; '를 추가하려고 시도했지만 문제가 해결되지 않습니다. – Wasim

0

몇 가지 조사를 수행했습니다. 일반적으로 Ember.SimpleAuth는 CORS와 함께 작동해야합니다. 내가 누락 된 부분은 GET 요청에 대한 응답으로

Access-Control-Allow-Origin: http://subdomain2.domain.com 

헤더입니다. Mozilla 문서의 예 : https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS도 참조하십시오. 모든 응답에는 Access-Control-Allow-Origin 헤더가 있어야합니다.

HTH

+0

확인해 주셔서 감사합니다. '$ headers-> set ('Access-Control-Allow-Origin', 'http://subdomain2.domain.com') 위의 질문에서 볼 수 있듯이이 값을 확실히 반환합니다. 신속하게 도메인 간 요청을 차단하지 않습니다. 어쩌면 내 시스템 어딘가에있는 버그 일 수도 있고, 좀 더 파고들 수도 있습니다. – Wasim

+0

흠, 당신은 단지 OPTIONS 요청에 대한 응답에 GET이 아니라 헤더가있는 것처럼 보입니다. 또한 로그에 아무것도 보이지 않습니까? – marcoow

+0

아, GET 및 OPTIONS 모두에 대해 아는 것이 없습니다. 내가 GET을 요구하지 않았다면 요청한 것 중 아무 것도 작동하지 않을 것이다. 정말 이상하게 보입니다. – Wasim