2009-07-05 4 views
23

작은 문제가 있습니다.도메인 간 쿠키

여러 도메인에 쿠키를 설정하려면 어떻게해야합니까?

나는 보안 문제를 이해하고 있으며 이전에 수행 된 것으로 확신합니다. 그 이유는 SSO입니다.

즉.

domain.com, domain1.com, domain2.com :

account.domain.com 도메인가 로그인 설정해야합니다.

PHP와 쿠키 또는 다른 방법을 사용하면 쉬운 방법이 있습니까?

+0

여기 stackoverflow에 대한 또 다른 게시물은 페이스 북에서 어떻게 작동하는지 보여줍니다. 예, iframe과 자바 스크립트로 가능합니다. http://stackoverflow.com/questions/4701922/how-does-facebook-set-cross-domain-cookies-for-iframes-on-canvas-pages – inorganik

+0

[HTTP 상태 관리 메커니즘 RFC6265] (http : // tools. ietf.org/html/rfc6265) – hakre

답변

28

domain.com이 domain1.com에 대한 쿠키를 설정하는 방법은 절대적으로 없습니다. 시도하고있는 것은 사용자의 브라우저가 각 도메인에 요청을 제출하여 자신의 쿠키를 설정할 수 있어야만 해결할 수 있습니다.

그런 다음 각 도메인에서 사용자의 신원을 확인하는 방법이 필요합니다. 두 가지 방법이에 있습니다

  1. 돌아 가기 채널 - 사이트는 사용자가 로그인되어 있는지 확인하기 위해 서로 직접 연락
  2. 는 GET 또는 POST에 토큰을 전달 - 사용자의 broweser가로 리디렉션됩니다. 다른 사이트는 ID 및 세션 상태를 포함하는 디지털 서명 된 매개 변수가 전달됩니다.

정말 복잡합니다. 나는 너 자신을 굴리지 말 것을 제안한다. 필자가 설명하는 PHP 구현을 위해 SimpleSAMLPHP을 살펴보십시오.

+0

여기에 또 다른 방법이 있습니다. domain.com을 domain1.com에 연결하여 토큰을 얻은 다음 JS 토큰의 헤더에 토큰을 전달하거나 별도의 필드로 전달하여 domain1.com이 토큰을 확인해야합니다 그에 따라 응답하십시오. 말이 돼? – Hafiz

5

는 당신이 시도하고하는 것은 할 수 없습니다. (PHP 보안 문제가 아니라 브라우저 보안 문제입니다.)

어떤 형태의 외부 인증을 사용하는 것 이외에 달성 할 수있는 가장 가까운 방법은 하위 도메인에서 쿠키에 액세스 할 수있게하는 것입니다. PHP의 set_cookie 함수의 선택적 '도메인'인수.

5

이 작업은 마스터처럼 작동하는 하나의 도메인과 슬레이브와 같은 다른 도메인을 통해 수행 할 수 있습니다.

도메인 accounts.domain.com이 있으며 마스터입니다.

그런 다음 우리는 당신이 domain.com에 로그온 할 수 있습니다 때, 사이트 accounts.domain.com이, 당신은 고유 ID와 쿠키를 얻을 수 있습니다 실제로있을거야 우리의 노예 domain.com, something.comanother.com

있어 그러면 브라우저가 domain.com의 로그온 후 방문 페이지 (예 : domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)로 리디렉션됩니다. 랜딩 페이지는 accounts.domain.com에 접속하여 브라우저 ID로 쿼리합니다. 거래가 괜찮 으면 에서 로그온 쿠키를받습니다.

다음으로 모든 도메인 (, something.comanother.com)은 accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>으로 리디렉션됩니다.우리가 집에 돌아 왔기 때문에 (우리는 이미 accounts.domain.com에 기록되어 있습니다) 방문 페이지 (<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)에 다시 연결될 것이고이 시점부터 로그온하는 부분과 같습니다. Google은 다른 도메인으로 원활하게 이동합니다 (사용자가 브라우저를 사용하지 않는 경우 일반적으로 리디렉션 된 페이지가 헤더 전송 (서버)/수신 (브라우저) 섹션을 통과 할 때까지 표시되지 않으므로).

활성 로그온이 실제로없는 경우 사이트는이 "부정적인 로그온"을 세션에 저장하고 더 이상 로그온을 시도하지 않습니다 (우리가 로그온하거나 다른 도메인을로드 할 때까지).