2012-01-16 3 views
2

기본 인증이 필요한 모바일 웹 앱이 있습니다. 다른 도메인의 서버에서 Ajax를 사용하여 기본 인증을 호출 할 수있었습니다. 그러나 응답에 문제가 있습니다.요청한 Ajax가 다른 도메인에서 반환 된 경우 쿠키 설정

보통 세션 ID는 브라우저에서 설정된 쿠키 헤더를 통해 Ajax 응답으로 설정됩니다. 나는 이것이 성공적인 인증에서 발생하지 않는다는 것을 알아 차렸다.

내가 한 것은 응답을 반환 할 때 헤더를 읽음으로써 쿠키를 수동으로 설정하려고했습니다. 나는 이것을 jQuerys jqxhr 객체를 통해 달성했다. 놀랍게도 서버에서 sessionID가 반환되었다고 표시 했더라도 jqxhr을 통해 응답에 설정된 쿠키 헤더를 볼 수 없었습니다.

이것은 상호 도메인 요청의 예상되는 동작입니까? 일부 응답 헤더가 삭제됩니까? 이것은 브라우저의 보안 기능입니까? 그렇다면이 문제를 해결하기 위해 무엇을 제안 하시겠습니까? (예 : 시체 ID를 반환하십시오.이 문제를 해결하기 위해 Shiro 보안 필터를 사용하고 있기 때문에 원하지 않습니다. 그것을 해킹해야할까요?)

도와주세요

답변

0

ajax를 사용하여 도메인 간 URI를 요청할 수 없습니다. 원격 인증 서버와의 요청/응답을 처리 할 자체 서버 측 프록시를 구현해야합니다. 응답을 복사/붙여 넣기 만 할 수 있지만 클라이언트와 동일한 도메인에 있어야합니다.

쿠키와 마찬가지로 쿠키는 읽기/쓰기가 가능한 도메인입니다.

귀하는이 프록시 만 요청할 권한이 있습니다. 또한 쿠키 생성 프로세스를 처리 한 다음 쿠키 ID를 클라이언트에 반환 할 수 있습니다.

url : www.auth.com/auth 
@params : string uuid, string password 
@returns : int shiroSessionId // yes it's more complicated, but KISS for the example 

당신은 만들어야합니다, www.mydomain.com/myAuth www가을은 wget 클래스에 :

는 (아주 간단한) 예를 들어, www.auth.com에, 당신은이 웹 서비스가 있습니다. 같은 매개 변수 auth.com/auth 서비스를 만들고 로컬 세션 쿠키

url : /myAuth 
@params : string uuid, string password 
@returns : int cookieId, -1 if login failed 

그리고 마지막으로 www.mydomain.com/login.html에서, 당신은 (여기 JQuery와 단위) JS 다음 호출이있을 것이다 :

$.ajax(function() { 
    url : '/myAuth', 
    date : {uuid: inputUuid, password: inputPassword}, // provided by a form 
    success(cookieId) { 
    if(cookieId > 0) { 
     alert('logged with cookie '+getCookie(cookieId)); 
    } else { 
     alert('login failed'); 
    } 
    } 
}); 

희망이 있습니다.

감사합니다.

+0

그는 아마도 jsonp를 사용하고 있습니다. – ThatGuy

+0

내 응용 프로그램에서 교차 도메인 아약스 요청을 허용하려면 서버 쪽에서 Allow-Origin 헤더를 사용하고 있습니다. 응용 프로그램은 전화 간격으로 패키징되어 모바일에 배포됩니다. 따라서 애플리케이션을 제공하는 서버는 없으며 단지 모바일에서 실행될 것입니다. PhoneGap은 브라우저 래퍼에서 실행되도록 패키지하기 때문에 상호 도메인은 여전히 ​​적용될 것입니다. – rycfung

+0

헤더 Access-Control-Allow-Origin이 "*"가 아닌 한, 이것도 작동합니다. – vaugham

관련 문제