normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

C# AdventCalender jp:2010最終日!Access Controlを利用したASP.NET MVC3 RC2アプリのシングルサイオン(SSO)!! 〜その2〜

C# AdventCalender jp:2010 も最終日」で公開した 「id:waritohutsu:20101225:1293276322 」だが、あまりに長くなってしまったので記事を二分割にした。
前回までの対応で、サイト全体に対する認証処理は実現できた。しかし、サイトの一部に対する認証をかけたいニーズも多いと思う。そこで今回は「Views/Home/About.cshtml」に対してのみ認証が必要なアプリに修正する。

Web.Configの修正

前回のASP.NET MVC3 RC2アプリ作成時に、Web.Configの設定は自動的に「サイトのどの場所にアクセスするにも認証が必要」という設定になっている。当該箇所を以下に修正する。

    • Web.Config(抜粋)
  <system.web>
    <!-- 無効化 ←はてなでうまく表示されなかったので、「<」を全角にした
    <authorization>
      <deny users="?" />
    </authorization>
    -->
    <!-- 新規に追加-->
    <authorization>
      <allow users="*" />
    </authorization>

上記の修正で、サイトアクセスに対する認証が不要となる。

「Views/Home/About.cshtml」ビューに対する認証処理の追加

次に、「Views/Home/About.cshtml」ビューに対する認証処理を追加するため、「Controller/HomeController.cs」に以下の修正を実施する。

    • HomeContorller.cs
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Welcome to ASP.NET MVC!";

            return View();
        }

        //AboutメソッドにAuthorize属性を追加
        [Authorize]
        public ActionResult About()
        {
            return View();
        }
    }

ASP.NET MVCではAuthorizeAttributeを利用して認証を実現することができる*1ので、「Views/Home/About.cshtml」ビューに対応した「HomeController.About()」メソッドに対する修正が必要となる。

コンテンツの修正(ホントは不要)

また、せっかくのクリスマス記事である。以下の様にコンテンツを修正してネタを仕込む等する。

    • 「Views/Home/About.cshtml」
@{
    ViewBag.Title = "今日は楽しいクリスマス…、過ぎる…!?!!";
}

<h2>About</h2>
<p>
     嫁と楽しいクリスマス!サイコー!!!
     <img src="../../Content/yome.jpg" alt="クリスマスは嫁と一緒" width="700" />
</p>
    • 「Views/Shared/_Layout.cshtml」(抜粋)
            <div id="menucontainer">
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("嫁とラブラブは簡単に見せられないよ!", "About", "Home")</li>
                </ul>
            </div>

アプリケーションの実行

Visual StudioからF5を押してアプリケーションを実行して欲しい。認証が行われずに以下の画面が立ち上がるはずだ。

次に、当該画面から「嫁とラブラブは簡単に見せられないよ!」リンクを押下すると認証が求められるはずだ。無事認証を実施すると、以下のような画面が表示されるはずだ。

以上で、C# Advent Calendar 2010は完了だ!メリークリスマス!!!!!

*1:必死でWeb.Configをいじってえらいハマってしまった…orz