私の意見では、Facebook ログインを実装する最善の方法は、すべての機能をサーバー側で実行することです。Hammock などの REST ライブラリを使用すると、これを実現できます。
実装方法に関する非常に役立つ記事は次のとおりです。
そのリンクに加えて、正しい方向を示すコードがいくつかあります。
ログインページ
次のクリック イベントを使用して、このログイン ページに ASP.NET ボタンを追加します。
protected void FacebookLogin_Click(object sender, EventArgs e)
{
string fbOuthUrl = "https://graph.facebook.com/oauth/authorize?client_id=<client-id>&redirect_uri=<callback-page-url>&scope=email,publish_actions";
Response.Redirect(fbOuthUrl);
}
コールバック ページ
ボタン クリック イベントで見たように、redirect_uri
はコールバック ページを指します。このコールバック ページは、アクセス トークンを取得するためのすべての機能と、実行する必要があるその他のログイン ジョブを実行します。
public partial class FBLoginCallback : System.Web.UI.Page
{
private string AccessToken;
protected void Page_Load(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(Request["code"]) && !Page.IsPostBack)
{
FacebookCallback();
}
}
private void FacebookCallback()
{
var client = new RestClient { Authority = "https://graph.facebook.com/oauth/" };
var request = new RestRequest { Path = "access_token" };
request.AddParameter("client_id", ConfigurationManager.AppSettings["facebook.appid"]);
request.AddParameter("redirect_uri", ConfigurationManager.AppSettings["facebook.login.callbackurl"]);
request.AddParameter("client_secret", ConfigurationManager.AppSettings["facebook.appsecret"]);
request.AddParameter("code", Request["code"]);
RestResponse response = client.Request(request);
// A little helper to parse the querystrings.
StringDictionary result = QueryStringHelper.ParseQueryString(response.Content);
AccessToken = result["access_token"];
SetUserInformation(AccessToken);
}
private void SetUserInformation(string sToken)
{
var client = new RestClient { Authority = "https://graph.facebook.com/" };
var request = new RestRequest { Path = "me" };
request.AddParameter("access_token", sToken); //Make use of the access token
RestResponse response = client.Request(request);
JavaScriptSerializer ser = new JavaScriptSerializer();
var parsedResult = ser.Deserialize<Facebook>(response.Content); //parsedResult will contain basic FB User info
//Redirect to the necessary page
Response.Redirect("/Default.aspx");
}
}
注: これには、私の投稿の冒頭で指摘したように、Hammock REST ライブラリを使用する必要があります。
これが役立つことを願っています。