miso_soup3 Blog

主に ASP.NET 関連について書いています。

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」をクリックし、ログインページに飛んでみます。

右側に、ソーシャルログイン用のスペースが用意されています。
が、まだtwittergoogleを選択するボタンがありません。
認証機能を開始するには、設定する必要があります。

設定

設定する場所は
プロジェクトの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の名前空間がとても新鮮に感じます。