2010-11-25 11 views
4

私は新しいjavascript sdkを使用しています。私はローカルに開発中です(つまり、ホストされていないサーバー)。Facebookのシングルサインオンはどのようにしてフード内で動作しますか?

js apiがローカルホストドメインのCookieに格納するアクセストークンを取得できました。しかし私が理解していないものは:fb jsがどのようにlocalhostのためのクッキーを設定することができます:

  • これは同じ起源政策に違反しないのですか?
  • fbが認証/承認にOauth 2.0プロトコルを使用する場合、コールバックURLを指定せずにメインページからのリダイレクトがないのに、シングルサインオンでアクセストークンを取得する方法を教えてください。

ここでは何が起こっているのか解明できますか?

答えて

2

FB JSは<script>タグを使用してドメインにFB JS SDKを含めているため、Cookieにアクセスできるようにすることで、ローカルホスト上でCookieを設定できます(GoogleアナリティクスとドメインのCookieの作成方法と同じです) 。

OAuth 2.0にはあなたのウェブサイトへのリダイレクトが含まれていますが、Facebookにcodeを返してaccess_tokenを取得するために必要な方法はありません。

+0

私が混乱したのは、2つのドメインのfacebook.comとlocalhostのCookieがフロー中に設定されていたことです。ポップアップウィンドウがfb.comを設定していて、元の文書に埋め込まれているfb jsがlocalhostを設定しています。 リダイレクトについて、どのようにfbがlocalhostにリダイレクトできますか?私のコンピュータはルータの背後にあり、私はlocalhostサーバに対してポート転送を有効にしていない。ここで何か他のことが起こっていますか? –

+0

はい、正しいと思います.JS SDKはlocalhost上のCookieを設定しています。facebook.comへのポップアップでは、独自のCookieが設定されています(常にそうとは限りません)。 Facebookがlocalhostにリダイレクトできる理由は、リダイレクトがソース(facebook.com)からターゲット(localhost)への_connection_を伴わず、代わりにブラウザがその接続を行うよう指示するためです。 [Charles](http://www.charlesproxy.com/)のようなものは、これをより明確にするために役立ちます。 – daaku

+0

これはOauthの流れ(fbはそれがそうであると主張している)によって混乱しています。 3脚のフローでは、プロバイダーはサーバーへのコールバックを行い、サーバーサイドコードはurlからaccess_tokenを解析し、元のクライアントUI状態にリダイレクトします。シングルサインオンの流れでは、状況は多少異なります。サーバー側の操作はありません。 fb jsは、ユーザーがアプリケーションを認証する新しいウィンドウ(fb.comドメイン)を起動します。その後、このウィンドウが自動的に閉じ、コントロールがオリジナルウィンドウに戻り、魔法のようにアクセストークンがクッキーに表示されます。 orignalの親はどのようにクッキーを取得しましたか? –

関連する問題