しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

新しく追加された Intranet Application を試す

とりあえず Intranet Application を選択してプロジェクトを作りました。プロジェクトはこんな感じです。

一目でわかるのは AccountController がなくなっていることですね。Windows 認証の処理は全て ASP.NET 側に投げているようです。

そして Web.config にも 2 つほど変更点がありました。

一つは想像していた方もいると思いますが、authentication 要素が Windows 認証を使うように設定されています。そして認証されてない PC からの接続を拒否するために authorization 要素と deny 要素が追加されています。

<authentication mode="Windows" />

<authorization>
  <deny users="?" />
</authorization>

これだけで Windows 認証が使えると思うのですが、今回のテンプレートでは roleManager 要素にも変更点がありました。

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
  </providers>
</roleManager>

ロールの管理に Windows グループメンバシップを使うものが追加されています。Authorize 属性の Roles に Active Directory のロールとか指定できそうな気がしますが、確認していません。

実行結果はこんな感じです。今使ってるマシンは bluesky.local ドメインに属しているので、ユーザー名にドメイン名が付いてます。

今まではフォーム認証のテンプレートしかなく Windows 認証を使うのがちょっと面倒でしたが、テンプレートが追加されたことでイントラ向けのページでも MVC 3 が選択肢に入りそうですね。

追記

IIS 7.5 Express で Windows 認証を使うには設定が必要なようです。

ASP.NET MVC 3: Intranet Application template - Gunnar Peipman's ASP.NET blog

デフォルトでは匿名認証が有効、Windows 認証が無効になっているので設定を逆にしてあげましょう。恥ずかしながら、IIS Express の設定をプロジェクトのプロパティで変更できるとは知りませんでした(汗

そして既に MSDN には Intranet Application 開発のエントリが公開されていたので載せておきます。ASP.NET 開発サーバでも NTLM 認証を有効にする必要があるみたいですが、認証自体は昨日見た限りでは行われていたみたいです。

How to Create an Intranet Site Using ASP.NET MVC

そして昨日は特に調べていなかった Authorize の Roles 指定ですが、以下のようなコードを書いて確認したところ、ドメインのグループでもちゃんと動作してくれました。

[Authorize(Roles = @"BLUESKY\Domain Users")]
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
}

[Authorize(Users = @"BLUESKY\shibayan")]
public ActionResult About()
{
    return View();
}

Authorize は属性なので実行時に弄ることはできないですが、細かいアクセス制御ができるのはいいですね。