emu雑記

C#erな人が書いているブログです。最近、javaを始めました。なんかいろいろやってます。

ASP.NET Web API + Facebook認証 で挫折…

ASP.NETを勉強しているんですが、ついに頭がパンクです。
この数年間、Webから目を背けてきたしっぺ返しが来てしまいました。

やりたかったことは、Facebookの認証を通してWeb APIにアクセスです。

まず、ASP.NET Web アプリケーションを作成。
f:id:emu717171:20131123040450j:plain

ASP.NET WebプロジェクトでWeb APIを選択。ここで、【認証の変更】を選択して「個人ユーザー アカウント」を選択します。
f:id:emu717171:20131123040516j:plain
f:id:emu717171:20131123040703j:plain

そのまま、プロジェクトを作成。
[App_Start] - [Startup.Auth.cs]のFacebookのコメントアウトを解除します。
f:id:emu717171:20131123040855j:plain

そして、Facebook側で作成したApp IDとApp Secretを追記。
f:id:emu717171:20131123041045j:plain
f:id:emu717171:20131123041047j:plain

プロジェクトの[Properties] - [Web]を選択して、開発サーバーのポートを確認。
f:id:emu717171:20131123041255j:plain

これを、Facebookのアプリの管理画面で、「Facebook上のアプリ」に貼り付け。
f:id:emu717171:20131123041527j:plain

これで、準備万端。
http://localhost:port/api/valuesにアクセスしてみると、無事に認証がかかっていることが確認できます。
f:id:emu717171:20131123042327j:plain

これは、[Controllers] - [ValuesController]クラスに[Authorize]属性が付与されているので、想定した動きになっています。

namespace WebApplication1.Controllers
{
    [Authorize]
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}

これを取り除いて実行してみると、"value1", "value2"が取得できてきます。

namespace WebApplication1.Controllers
{
    //[Authorize]
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }
}

f:id:emu717171:20131123042401j:plain

ここまでは順調だったんですが、最後どうやってFacebookに認可を得るか。

http://localhost:port/api/Account/ExternalLogin
あたりのGETメソッドなどなど、いろいろ試してみたんですが、
なかなかこれといった情報がわからずに挫折…。

もちろん、ASP.NET WebプロジェクトでMVCで行った場合には、きちんとOAuthの画面などにジャンプしてくれるんですけどね…。

そこらへんは、下記の参考サイトをご確認ください。

*1:Visual Studio 2012の記事のため、多少の読み替えを行ってください