酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

セキュア接続をオンにしたユーザーの場合、Facebook C# SDKを使ってもアクセストークンが取得出来なくなっている現象について

いつからか分からないのですが、Facebook C# SDKがWindows Phoneで利用出来なくなっています。[セキュア接続]を有効にしているユーザーの場合のみ発生している不具合です。

WebBrowserコントロール上での認証は問題なく通るのですが、残念ながらアクセストークンを取得出来ません。

サンプルコードを実行しても認証が通りませんので、Facebook C# SDKを使用しているWindows Phoneアプリは全滅だと思われます。

ポチポチとステップ実行しなから調べたところ、そもそもアクセストークンを含んだjsonコードが返ってきていない(取得出来ていない)のが分かりました。

既にCodeplexのIssueにも上がっているのですが現時点では対応策がありません。

Hi,
I think, this issue isn't confined to the sample source.
FacebookOAuthClient doesn't support secured login because GetLoginUrl method is using hard-coded non-secured login url.

--Source
var url = "http://www.facebook.com/dialog/oauth/?" + FacebookUtils.ToJsonQueryString(mergedParameters);
--

Thanks.

Project Moved - View Issue #5931: WP sample works only when FB account is not secured

と、思ったら日本語で今回の現象について書かれている方がいました。

Facebook C# SDK(Version5.4.1.0)においてセキュア接続を使用してOAuth認証をするには、FacebookOAuthClientクラスの下記の部分をhttpsに変えてやる必要があります。

GetLoginUrlメソッドのリダイレクトURLを設定している部分(130行目あたり)

defaultParameters["redirect_uri"] = RedirectUri ?? new Uri("https://www.facebook.com/connect/login_success.html");

同じくGetLoginUrlメソッドのログインURLを設定している部分(150行目あたり)

var url = "https://www.facebook.com/dialog/oauth/?" + FacebookUtils.ToJsonQueryString(mergedParameters);

ちなみに、CodePlexのIssueTrackerに同じようなIssueがあったのでVoteしてCommentしときました。

TFC Software Blogs - Facebook C# SDKのOAuth認証をセキュア接続設定してるアカウントで使うとエラーになる

うーん、うちの環境だとこの方法を実施してもアクセスキーが取得出来ないんですよねぇ……