2012-04-06 3 views
5

좋아, 내 초기 질문에 실수 한 것 같습니다. 그래서, 여기에 몇 가지 수정 사항이 있습니다. 두 번째 리디렉션은 프로토콜이 HTTPS (SSL)로 변경되면 중지됩니다.브라우저가 AJAX 응답의 리디렉션을 따르지 않습니다. (PHP 생성 응답에서 CAS 인증을 사용하고 있습니다.)

필자의 경우 리디렉션이 여러 번 발생하고 브라우저가 두 번째 리디렉션을 따르지 않습니다. 첫 번째 리디렉션을 수행하지만 오류가 반환됩니다.

리디렉션이 포함 된 JavaScript AJAX 응답은 자동으로 추적되지만 내 경우에는 보이지 않습니다. 첫 번째 리디렉션에는 자동으로 브라우저가 이어지고 헤더의 두 번째 리디렉션을 따르지 않고 첫 번째 리디렉션이 반환됩니다. 내 문제는 모든 리디렉션이 브라우저에 자동으로 이어지기를 바랍니다.

리디렉션은 phpCAS 라이브러리의 일부입니다. 결과를 반환하기 전에 매번 사용자 인증을 확인하는 PHP로 작성된 API가 있습니다.

여기에 순서가 있습니다. 주목해야 할 중요한 점은 브라우저가 리디렉션을 1 회 수행 한 후 두 번째 응답을 반환한다는 것입니다. 나는 AJAX 호출을 localhost/example/api으로 만들 때 모든 것을 끝내고 마지막 응답을 반환하는 것을 선호합니다.

로컬 호스트/예 jQuery.ajax를 사용

  • 통화 localhost/example/api()

응답 1 로컬 호스트/예/API

  • 사용하여 (https://localhost/accounts/cas/login?service=api.example.com&gateway=true 리디렉션 SSL).

응답 2 : (SSL) 로컬 호스트/계정/CAS/로그인 서비스 = api.example.com & 게이트웨이 = 사실

  • 쿼리 키 '게이트웨이'존재의 로그인은 티켓이 있거나없는 (서비스가 사용자가 로그인했는지 여부를 신호로 보내기 위해) 'service'키가 제공 한 URL로 다시 리디렉션됩니다.

응답 3 : 로컬 호스트/API는 티켓 = 티켓

  • 티켓을 확인하고 티켓없이 다시 자체에 리디렉션합니다.

응답 4 : 로컬 호스트/API

  • CAS에 클라이언트가 $ _SESSION에 보이는이 시간은 티켓이 무엇인지 기억하고 JSONP를 반환하는 API 요청을 처리합니다.

내가 OpenID 또는 OpenAuth (orization)를 통해 CAS를 사용하고있는 특별한 이유는 없습니다.CAS는 내가 워드 프레스에서 일할 수 있었던 첫 번째 인증 모듈 일뿐입니다. 나는 다른 인증 라이브러리, CMS, 프레임 워크 등을 사용하는 관점에서 제안을하고 있지만,이 프로젝트가 끝나기를 바랍니다. 그래서 덜 재가공하면 좋습니다.

+0

알다시피, 나는 잠시 동안 StackOverflow에서 검색 한 후에이 질문을 게시했습니다. 그런 다음 질문을 게시 한 후에 다른 검색을 수행하고 StackOverflow에서 비슷한 질문을 찾습니다. http://stackoverflow.com/questions/2961051/cas-authentication-and-redirects-with-jquery-ajax –

+0

두 번째 응답이 다른 프로토콜 (SSL)을 사용하고 있고 하위 도메인이 다르기 때문에 다음과 같이 보입니다. 오류를 설명합니다. 나는 브라우저가 리다이렉트를 따르고 있음을 의미하며, 무엇인가가 변경 될 때 (프로토 콜 또는 서브 모듈 또는 양쪽 모두), 데이터가 응답으로 리턴되지 않을 때가 아니다. 그렇지 않으면 JSONP 응답이 그 시점에 추가 될 수있다. .. 그걸 밖으로 시도해야합니다 ... 한숨.) –

답변

6

귀하의 의견을 추가함에 따라 나중에 아약스 요청은 same origin policy이됩니다.

예, JSONP를 사용할 수 있습니다. 그러나 IE8 이상 만 지원해야하는 경우 운이 좋으면 CORS을 사용하는 것이 더 좋은 해결책 일 수 있습니다.

기본적으로, 추가 헤더는 서버 응답에

access-control-allow-origin: http://api.example.com 
access-control-allow-credentials: true 

, 당신은 크로스 원점 정책 해결 할 수있다.

또한 jQuery ticket을 참조하면 jQuery에서 다소 유용합니다.

+0

오, 좋아, 내가 할 수있는 모든 하위 도메인에 대한 액세스 권한이 있기 때문에. 그게 모든 브라우저에서 작동할까요? –

+0

@BiagioArobba가 아닙니다. IE8 +, 오페라 12+, http://caniuse.com/#search=cors – Razor