MVC3でサイトのアクセス制限を設定した
最近、ASP.NET MVC3をいじってWebアプリの作成をしている。
Razorなど非常に便利な機能が多く、気分良く開発を行うことが出来る。
今回はこのMVC3を使ってサイト構築をする際に認証を使ってアクセス制限を設定する手順を調べたのでブログにまとめておく。
とりあえずテスト用のサイトを構築する
はじめに、テスト用のサイトを作成する。以下のものが必要だ。
- Visual Studio 2010 (Visual Web Developer 2010 でも可)
- ASP.NET MVC 3 RTM
- Entity Framework 4.1
- SQL Server Compact Edition 4.0
- IIS 7.5 Express
インストールが済んでいない場合はこちらからWebPIをダウンロード・インストールして取得する。
プロジェクトの作成はVS2010を起動してC#-Web-ASP.NET MVC3 Web Applicationを指定すればよい。
アクセス制限を確認する
まず、今回作成したAuthTestプロジェクトをF5で起動してみる。
ブラウザが自動で立ち上がって/Home/Indexにアクセス出来るはずだ。
これは/Home/Indexにアクセス制限が掛かっていないため、ログインしていないユーザでも普通にアクセスできているのだ。
では、アクセス制限がかかっているページはどこなのか?答えから言うと /Account/ChangePassword である。
試しにアドレスバーに/Account/ChangePasswordを入力してアクセスしようとしてみる。
すると/Account/LogOnにリダイレクトされるはずだ。
パスワードを変更するページなので、ログインしたユーザのみアクセスできるように制限がかかっているわけだ。
この制限はどこでかけられ、なぜ/Account/LogOnにリダイレクトされるのか見ていく。
制限をかけている部分はControllerにある。
Controllers/AccountControllerのChangePasswordに対するGET/POSTメソッドをみると[Authorize]と書いてあるはずだ。
要はControllerで各フォームのPOST/GETにアクセス制限を付けているのである。
リダイレクト先はWeb.configで指定している。
ログインページをリダイレクト先に指定しておけば、ログインが必要なフォームへのアクセスはすべてログイン画面に
リダイレクトすることができる。
Webサイト全体にアクセス制限をかけたい
すべてのフォームのGET/POSTにいちいち[Authorize]を指定するのは現実的ではない。
Web.configでシステム全体にアクセス制限をかけるほうが現実的だろう。
方法としては
しかし、単純にこれをやってしまうとデバッグ時に下のような画面があらわれる。
cssを読み込めていないのである。この他にも、Register画面など匿名ユーザでもアクセスしたいリソースや画面はあるはずだ。
これは例外として除外する必要がある。そのためには再度Web.configをいじる。
今回はcssを読み込みたいのでcssが保存されているContentフォルダのアクセス制限を解除した。