Facebookのキャンバスアプリを持っています。JS SDKを使用して、ブラウザー側でユーザーを認証し、FB.apiを介してさまざまな情報(名前、友達など)を要求しています。
また、ajax呼び出しを行うことにより、サーバー上のデータベースにいくつかの追加のユーザー情報(Facebookには保持されていません)を保持したいと思います。
{ userFavouriteColour: "Red" }
これをサーバーに保存して正しいユーザーに関連付けるには、Facebook uidを知る必要があり、これには問題があります。クライアントからサーバーにuidを渡すにはどうすればよいですか。
オプション1:uidをajaxリクエストに追加します:
{ uid: "1234567890",
userFavouriteColour: "Red" }
これは明らかに良くありません。他の人のFacebookIDを使用して私のWebサービスにajaxリクエストを送信し、お気に入りの色を変更するのは簡単です。
オプション2:サーバーで、Cookieからuidを抽出します:これも可能ですか?Facebookがuidとアクセストークンを含むCookieを設定することを読みましたが、ドメインでこのCookieにアクセスできますか?さらに重要なことに、Cookieからuidを安全に抽出できますか、それともオプション1と同じようになりすましが可能ですか。
オプション3:サーバーでのユーザーサーバー側認証:サーバー側認証を使用して、サーバーでユーザーIDを検証できます。しかし、ブラウザですでにクライアント側の認証を使用している場合、これは機能しますか?最終的に2つの異なるアクセストークンになりますか?ブラウザからFB.apiリクエストを作成したいので、(サーバーだけでなく)クライアントにアクセストークンが必要です。
これは非常に一般的なシナリオであるに違いないので、基本的な何かが欠けていると思います。Facebookのドキュメント(さまざまな認証フロー、アクセストークン、signed_requestなど)とSOに関する多くの投稿を読みましたが、クライアント側の認証とサーバー側の認証がどのようにうまく連携するかはまだわかりません。
つまり、サーバー上のユーザーのIDを知りたいのですが、それでもクライアントブラウザーからFacebook APIにリクエストを送信しますか?
(サーバーでASP.NETとFacebook C#SDKを使用しています)
編集:報奨金を追加しました。私は、この状況に対処する方法について、より明確で公式な推奨事項、または例さえも入手したいと思っていました。すでに述べたように、認証フローに関する公式のFBドキュメントをすでにたくさん読んでいますが、クライアント側とサーバー側の認証がどのように連携するかについて明確なものはまだ見つかりません。