MVC4のテンプレート内に追加されたOAuth/OpenId認証
8/15に公開されたMVC4のプロジェクトテンプレートに、
OAuth/OpenId を使った認証が追加されていたので、試してみました。
今までと同様、すでにAccountControllerに認証ロジックが記述してあるので、
数分で実行できます。
公式の説明はこちらです。→OAuth/OpenID Support for WebForms, MVC and WebPages
ビデオもあります→OAuth in the Default ASP.NET 4.5 Templates
とりあえずプロジェクト作成
MVC4を更新し、
新しいプロジェクトでInternetApplicationを選択します。
作成後、とりあえずF5で実行してみます。
右上の「Login」をクリックし、ログインページに飛んでみます。
右側に、ソーシャルログイン用のスペースが用意されています。
が、まだtwitterやgoogleを選択するボタンがありません。
認証機能を開始するには、設定する必要があります。
設定
設定する場所は
プロジェクトのApp_Startフォルダの中の、AuthConfig.csです。
デフォルトではすべてコメントアウトされています。
ここで設定したものが、先ほどのログインページに表示されるようになります。
とりあえずtwitterでやってみます。
twitterでのログインを提供するには、アカウントとconsumerKeyとconsumerSecretを取得する必要があります。
(facebookだと携帯のメールアドレスが必要だったような…)
twitterでアプリの登録
- twitter開発者用のページ に飛びます。
- 右側の「Create an app」をクリック
- ログインして…アプリの情報を登録します
Name→アプリケーションの名前
Description→アプリケーションの説明
WebSite→アプリケーションのWEBサイトURL
Callback URL→認証から帰ってきた後にアクセスするURL
とりあえず試すだけなので、すべて適当でOKです。
WebSiteとCallback URLは、URLの検証が行われますが、これも検証が通るよう適当に入力します。
登録後、consumerKeyとconsumerSecretが表示されるので、
先ほどのプロジェクトのAuthConfig.csに記述します。
試す
これで設定は終了です。
ログインページにtwitterのボタンが表示されています。
ログイン後は、アプリケーションで利用するNameの登録を要求されます。
名前もパスワードも、ソーシャルとは別に、アプリケーション用に作成できるようになっています。
設計をちょっとのぞく
作成されたデータベースは、このようになってます。
このデータベースの作成トリガーは、
AccountControllerのアクションフィルター属性クラスの中にあります。
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
OAuth/OpenIdの認証ロジックは、
Microsoft.Web.WebPages.OAuth 名前空間のOAuthWebSecurityクラス、
認証クッキーの発行もOAuthWebSecurity.Loginや、WebSecurity.Loginで行っています。
今までは、System.Web.Security.MembershipやFormsAuthenticationしか使ったことがないので、
WebMatrixや、Microsoft.Web.WebPagesの名前空間がとても新鮮に感じます。