2010-11-25 2 views
4

새 javascript SDK를 사용하고 있으며 로컬로 개발 중입니다 (예 : 호스팅 된 서버 없음).페이스 북 싱글 사인온 (SSO)은 어떤 방식으로 작동합니까?

js api가 localhost 도메인의 쿠키에 저장하는 액세스 토큰을 성공적으로 얻을 수있었습니다. 그러나 내가 이해할 수없는 것은 다음과 같습니다.

  • fb js가 localhost에 대해 쿠키를 설정할 수있는 방법은 무엇입니까? 이것이 동일한 원산지 정책을 위반하지 않습니까?
  • fb가 인증/권한 부여에 Oauth 2.0 프로토콜을 사용하는 경우 콜백 URL을 지정하지 않았지만 내 기본 페이지에서 리디렉션이없는 경우에도 단일 로그온에서 액세스 토큰을 검색하는 방법은 무엇입니까?

여기에서 무슨 일이 일어나는지 누군가가 알아낼 수 있습니까?

답변

2

FB JS는 <script> 태그를 사용하여 도메인에 FB JS SDK를 포함하고 있기 때문에 쿠키에 대한 액세스 권한을 부여하여 로컬 호스트에 쿠키를 설정할 수 있습니다 (Google 애널리틱스가 도메인에 쿠키를 작성하는 것과 같은 방식으로) .

OAuth 2.0에는 웹 사이트로 리디렉션하는 것이 포함되어 있습니다. Facebook에 code을 반환하여 앱에서 access_token을 검색하는 데 필요한 다른 방법은 없습니다.

+0

두 개의 도메인, facebook.com 및 localhost의 쿠키가 흐름 중에 설정된다는 것이 혼란 스러웠습니다. 팝업 창이 fb.com을 설정하고 fb js (원본 문서에 내장되어 있음)가 localhost를 설정하고있는 것입니까? 리디렉션에 대해 어떻게 fb가 localhost로 리디렉션 할 수 있습니까? 내 컴퓨터는 라우터 뒤에 있으며 로컬 호스트 서버에 포트 포워딩을 사용할 수 없습니다. 뭔가 다른 일이 벌어 질 수 있을까요? –

+0

네, 맞습니다 - JS SDK가 localhost에서 쿠키를 설정하고 facebook.com의 팝업이 자체 쿠키를 설정합니다 (항상 그런 것은 아니지만). Facebook이 localhost로 리디렉션 할 수있는 이유는 리디렉션이 소스 (facebook.com)에서 대상 (localhost)까지의 _connection_을 포함하지 않고 브라우저가 해당 연결을 작성하기위한 지침 만 포함하기 때문입니다. [Charles] (http://www.charlesproxy.com/)와 같은 것이 더 명확한 방법으로 이것을 훨씬 명확하게 만들 수 있습니다. – daaku

+0

이것이 Oauth 플로우 (fb가 주장하는대로)에 의해 혼란 스럽습니다. 3-legged 플로우에서 공급자는 서버 측 콜백을 통해 서버 측 코드가 url에서 access_token을 파싱하고 원래 클라이언트 UI 상태로 리디렉션합니다. 싱글 사인온 (single sign-on) 흐름에서는 상황이 다소 다릅니다. 서버 측 상호 작용은 없습니다. fb js는 사용자가 앱을 승인하는 새 창 (fb.com 도메인)을 실행합니다. 그런 다음이 창이 자동으로 닫히고, 컨트롤이 원래 창으로 돌아가고 마술처럼 액세스 토큰이 쿠키에 나타납니다. orignal 부모가 쿠키를 어떻게 얻었습니까? –

관련 문제