次の方法で共有


Windows 認証でユーザーを認証する (C#)

提供元: Microsoft

MVC アプリケーションのコンテキストで Windows 認証を使用する方法について説明します。 アプリケーションの Web 構成ファイル内で Windows 認証を有効にする方法と、IIS で認証を構成する方法について説明します。 最後に、[Authorize] 属性を使用して、コントローラー アクションへのアクセスを特定の Windows ユーザーまたはグループに制限する方法について説明します。

このチュートリアルの目的は、インターネット インフォメーション サービスに組み込まれているセキュリティ機能を利用して、MVC アプリケーションのビューをパスワードで保護する方法を説明することです。 特定の Windows ユーザーまたは特定の Windows グループのメンバーであるユーザーのみがコントローラー アクションを呼び出せるようにする方法について説明します。

社内 Web サイト (イントラネット サイト) を構築していて、ユーザーが Web サイトにアクセスするときに標準の Windows ユーザー名とパスワードを使用できるようにする場合は、Windows 認証を使用するのが理にかなっています。 外向きの Web サイト (インターネット Web サイト) を構築する場合は、代わりにフォーム認証を使用することを検討してください。

Windows 認証の有効化

新しい ASP.NET MVC アプリケーションを作成する場合、Windows 認証は既定では有効になりません。 フォーム認証は、MVC アプリケーションで有効になっている既定の認証の種類です。 MVC アプリケーションの Web 構成 (web.config) ファイルを変更して、Windows 認証を有効にする必要があります。 <authentication> セクションを見つけて、次のようにフォーム認証ではなく Windows を使用するように変更します。

<authentication mode="Windows">

</authentication>

Windows 認証を有効にすると、Web サーバーでユーザーが認証されるようになります。 通常、ASP.NET MVC アプリケーションを作成して展開するときに使用する Web サーバーには、2 種類があります。

まず、MVC アプリケーションを開発するときに、Visual Studio に含まれている ASP.NET 開発 Web サーバーを使用します。 既定では、ASP.NET 開発 Web サーバーでは、現在の Windows アカウント (Windows へのログインに使用したアカウント) のコンテキストですべてのページを実行します。

ASP.NET 開発 Web サーバーでは、NTLM 認証もサポートされています。 NTLM 認証を有効にするには、ソリューション エクスプローラー ウィンドウでプロジェクトの名前を右クリックし、[プロパティ] を選択します。 次に、[Web] タブを選択し、[NTLM] チェックボックスをオンにします (図 1 を参照)。

図 1 – ASP.NET 開発 Web サーバーの NTLM 認証を有効にする

clip_image002

実稼働 Web アプリケーションの場合は、Web サーバーとして IIS を使用します。 IIS では、次のようないくつかの種類の認証がサポートされています。

  • 基本認証 – HTTP 1.0 プロトコルの一部として定義されます。 インターネット経由でユーザー名とパスワードをクリア テキスト (Base64 エンコード) で送信します。 - ダイジェスト認証 - パスワード自体ではなく、パスワードのハッシュをインターネット経由で送信します。 - 統合 Windows (NTLM) 認証 – Windows を使用するイントラネット環境で使用する最適な認証の種類。 - 証明書認証 - クライアント側の証明書を使用した認証を有効にします。 証明書は Windows ユーザー アカウントにマップされます。

Note

これらのさまざまな種類の認証の詳細な概要については、https://msdn.microsoft.com/library/aa292114(VS.71).aspx を参照してください。

インターネット インフォメーション サービス マネージャーを使用して、特定の種類の認証を有効にすることができます。 どのオペレーティング システムでも、すべての種類の認証を使用できるわけではないことに注意してください。 さらに、Windows Vista で IIS 7.0 を使用している場合は、インターネット インフォメーション サービス マネージャーに表示される前に、さまざまな種類の Windows 認証を有効にする必要があります。 [コントロール パネル]、[プログラム]、[プログラムと機能]、[Windows の機能の有効化または無効化] を開き、[インターネット インフォメーション サービス] ノードを展開します (図 2 を参照)。

図 2 – Windows IIS 機能の有効化

clip_image004

インターネット インフォメーション サービスを使用すると、さまざまな種類の認証を有効または無効にすることができます。 たとえば、図 3 は、IIS 7.0 を使用する場合の匿名認証の無効化と統合 Windows (NTLM) 認証の有効化を示しています。

図 3 – 統合 Windows 認証の有効化

clip_image006

Windows ユーザーとグループの認可

Windows 認証を有効にした後、[Authorize] 属性を使用してコントローラーまたはコントローラー アクションへのアクセスを制御できます。 この属性は、MVC コントローラー全体または特定のコントローラー アクションに適用できます。

たとえば、リスト 1 の Home コントローラーでは、Index()、CompanySecrets()、StephenSecrets() という 3 つのアクションが公開されています。 Index() アクションは誰でも呼び出すことができます。 ただし、CompanySecrets() アクションを呼び出すことができるのは、Windows ローカル マネージャー グループのメンバーだけです。 最後に、Stephen (Redmond ドメイン内) という名前の Windows ドメイン ユーザーのみが、StephenSecrets() アクションを呼び出すことができます。

リスト 1 – Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [Authorize(Roles = "Managers")]
        public ActionResult CompanySecrets()
        {
            return View();
        }

        [Authorize(Users="redmond\\swalther")]
        public ActionResult StephenSecrets()
        {
            return View();
        }



    }
}

Note

Windows ユーザー アカウント制御 (UAC) により、Windows Vista または Windows Server 2008 を使用する場合、ローカルの Administrators グループの動作は他のグループとは異なります。 コンピューターの UAC 設定を変更しない限り、[Authorize] 属性ではローカルの Administrators グループのメンバーを正しく認識しません。

適切なアクセス許可なしでコントローラー アクションを呼び出そうとしたときの正確な動作は、有効になっている認証の種類によって異なります。 既定では、ASP.NET 開発サーバーを使用すると、単に空白のページが表示されます。 このページには、"401 承認されていません" の HTTP 応答状態が表示されます。

一方、匿名認証が無効で基本認証が有効になっている IIS を使用している場合は、保護されたページを要求するたびにログイン ダイアログ プロンプトが表示されます (図 4 を参照)。

図 4 – 基本認証ログイン ダイアログ

clip_image008

まとめ

このチュートリアルでは、ASP.NET MVC アプリケーションのコンテキストで Windows 認証を使用する方法について説明しました。 アプリケーションの Web 構成ファイル内で Windows 認証を有効にする方法と、IIS で認証を構成する方法について説明しました。 最後に、[Authorize] 属性を使用して、コントローラー アクションへのアクセスを特定の Windows ユーザーまたはグループに制限する方法について説明しました。