1

サーバー側の認証を使用して、Facebookログインとすでに統合されているWebサイトがあります。

Facebookで実行するアプリケーションに変換するのに問題があります。

問題は、Facebookが認証ページをまったく表示しないことです

したがって、実際にはサーバー認証プロセスに到達していません。

現在、アプリケーションはローカルマシンで実行されています。

私のアプリはFacebookアプリケーションとして定義されています:(サイトのセキュリティ目的でのみローカルホストの前に空白を追加します)

  • キャンバスURL:http:// localhost:4300 / fbopt /
  • 安全なキャンバスのURL:https:// localhost:4303 / fbopt / "

[セキュアURLなしでサンドボックスで実行している場合にも同じ問題が発生します]

「アプリに移動」ボタンのある「ファンページ」があります。ボタンを押すと、次のURLに移動します:https://apps.facebook.com/ [appid] /?fb_source = timeline

ブラウザはフレームを含むページのロードを開始します。下のフレームは、指定したURLへのPOSTリクエストを作成します。

私のアプリケーションは、ページを次のURLにリダイレクトします。

https://www.facebook.com/dialog/oauth?client_id=[appid]&redirect_uri=https://localhost:4303/fbopt/hook&scope=email,user_location,user_birthday

Facebookには、必要な権限を備えたアプリケーション認証フォームが表示されると思います。

残念ながら、これは起こりません。空のページがフレーム内に表示され、HTMLは空です!

(Chromeネットワークデバッガーから)URLが実際にアクセスされていることがわかりますが、応答はHTTP 200ステータス(エラーではない)ですが、応答データはありません。代わりに、

Xフレーム-オプション:拒否

応答ヘッダー-フレーム内でレンダリングが拒否されました!なんで?

Facebookのフレーム構造の外で「手動で」上記のURLをロードすると、適切な権限を持つ認証画面が表示されます。

キャンバスで動作させるには何が欠けているのだろうか。

私が何を追加すべきか、またはそのような問題をデバッグする方法についてのヒントはありがたいです。

ありがとう、マックス

4

3 に答える 3

2

私の根本的な問題は、フレームのリダイレクトではなく、ページ全体をリダイレクトしようとしていたことのようです。

ここから開始: 空白のキャンバス=>'X-Frame-Optionsによって表示が禁止されているため、ドキュメントの表示を拒否しました。'

ここに行きました: https ://developers.facebook.com/docs/howtos/login/login-for-canvas/

それは言う:

アプリケーションはiframeに読み込まれているため、302を返してユーザーをログインダイアログにリダイレクトすると失敗します。代わりに、Javascript window.top.locationプロパティを設定してリダイレクトする必要があります。これにより、親ウィンドウがログインダイアログのURLにリダイレクトされます。

これはおそらく私の大きな間違いでした。

マックス

于 2013-02-03T23:28:33.607 に答える
0

あなたはiframeあなたのアプリにありますか?X-Frame-Optionsコンテンツを使って送信することDENYは、クリックジャッキングと戦うためのFacebookの方法です。より詳しい情報:

http://darklaunch.com/2010/11/09/facebook-s-anti-clickjacking-techniques

Facebookにiframeを追加すると、2週間以内に機能しなくなります

于 2013-02-03T22:55:01.230 に答える
0

私も同じ問題を抱えています。302リダイレクトは私がそれらをたくさん使用しているので機能しますが、何らかの理由でFacebookドメインにリダイレクトすることはできません。必要に応じて、javascriptを介してトップリダイレクトを実行できます。私が行ったことは、URLを受け入れるhtmlを作成し、それをtop.locationにロードしてから、apps.facebook.comにリダイレクトすることです。X-frameの場合、おそらくAntiForgeryToken(.netを使用している場合)があるためです。これは、ヘッダーにxframesameoriginを挿入するためです。これを無効にするには

AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
于 2015-05-13T15:17:43.617 に答える