Share via


使用 Windows 驗證驗證使用者 (C#)

Microsoft提供

瞭解如何在 MVC 應用程式的內容中使用Windows 驗證。 您將瞭解如何在應用程式的 Web 組態檔內啟用Windows 驗證,以及如何使用 IIS 設定驗證。 最後,您將瞭解如何使用 [授權] 屬性來限制特定 Windows 使用者或群組的控制器動作存取。

本教學課程的目標是說明如何利用 Internet Information Services 內建的安全性功能,以密碼保護 MVC 應用程式中的檢視。 您將瞭解如何只允許特定 Windows 使用者或屬於特定 Windows 群組成員的使用者叫用控制器動作。

當您在內部公司網站 (內部網站) ,而且您希望使用者在存取網站時能夠使用其標準 Windows 使用者名稱和密碼時,使用Windows 驗證很合理。 如果您要在網際網路網站 (建置向外的網站,) 請考慮改用表單驗證。

啟用 Windows 驗證

當您建立新的 ASP.NET MVC 應用程式時,預設不會啟用Windows 驗證。 表單驗證是針對 MVC 應用程式啟用的預設驗證類型。 您必須修改 MVC 應用程式的 Web 組態 (web.config) 檔案,以啟用Windows 驗證。 尋找驗證 > 區 < 段,並將其修改為使用 Windows 而非表單驗證,如下所示:

<authentication mode="Windows">

</authentication>

當您啟用Windows 驗證時,您的網頁伺服器會負責驗證使用者。 一般而言,建立和部署 ASP.NET MVC 應用程式時,您所使用的 Web 服務器類型有兩種。

首先,開發 MVC 應用程式時,您會使用 Visual Studio 隨附的 ASP.NET Development Web Server。 根據預設,ASP.NET 開發網頁伺服器會在目前 Windows 帳戶的內容中執行所有頁面, (您用來登入 Windows) 的任何帳戶。

ASP.NET 開發 Web 服務器也支援 NTLM 驗證。 您可以在 [方案總管] 視窗中以滑鼠右鍵按一下專案的名稱,然後選取 [屬性] 來啟用 NTLM 驗證。 接下來,選取 [Web] 索引標籤並核取 [NTLM] 核取方塊, (請參閱圖 1) 。

圖 1 – 為 ASP.NET 開發網頁伺服器啟用 NTLM 驗證

clip_image002

就生產 Web 應用程式而言,您可以使用 IIS 作為網頁伺服器。 IIS 支援數種類型的驗證,包括:

  • 基本驗證 – 定義為 HTTP 1.0 通訊協定的一部分。 透過網際網路以純文字傳送使用者名稱和密碼, (Base64 編碼) 。 - 摘要式驗證 – 透過網際網路傳送密碼雜湊,而不是密碼本身。 - 整合式 Windows (NTLM) 驗證 – 使用視窗在內部網路環境中使用的最佳驗證類型。 - 憑證驗證 – 使用用戶端憑證啟用驗證。 憑證會對應至 Windows 使用者帳戶。

注意

如需這些不同驗證類型的詳細概觀,請參閱 https://msdn.microsoft.com/library/aa292114(VS.71).aspx

您可以使用 Internet Information Services Manager 來啟用特定類型的驗證。 請注意,每種作業系統都無法使用所有類型的驗證。 此外,如果您使用 IIS 7.0 搭配 Windows Vista,您必須先啟用不同類型的Windows 驗證,才能出現在 Internet Information Services Manager 中。 開啟主控台、程式、程式和功能、開啟或關閉 Windows 功能,然後展開 [Internet Information Services] 節點 (請參閱圖 2) 。

圖 2 – 啟用 Windows IIS 功能

clip_image004

您可以使用 Internet Information Services 來啟用或停用不同類型的驗證。 例如,圖 3 說明在使用 IIS 7.0 時停用匿名驗證並啟用整合式 Windows (NTLM) 驗證。

圖 3 – 啟用整合式 Windows 驗證

clip_image006

授權 Windows 使用者和群組

啟用Windows 驗證之後,您可以使用 [授權] 屬性來控制控制器或控制器動作的存取。 這個屬性可以套用至整個 MVC 控制器或特定的控制器動作。

例如,清單 1 中的 Home 控制器會公開三個名為 Index () 、CompanySecrets () 和 StephenSecrets () 的動作。 任何人都可以叫用 Index () 動作。 不過,只有 Windows 本機管理員群組的成員可以叫用 CompanySecrets () 動作。 最後,只有 Redmond 網域中名為 Stephen (的 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();
        }



    }
}

注意

由於 Windows 使用者帳戶控制 (UAC) ,使用 Windows Vista 或 Windows Server 2008 時,本機 Administrators 群組的行為會與其他群組不同。 除非您修改電腦的 UAC 設定,否則 [授權] 屬性無法正確辨識本機 Administrators 群組的成員。

當您嘗試叫用控制器動作而不使用正確的許可權時,會發生什麼情況,取決於啟用的驗證類型。 根據預設,使用 ASP.NET Development Server 時,您只要取得空白頁面即可。 頁面會提供 401 未授權 的 HTTP 回應狀態。

如果另一方面,您使用 IIS 停用匿名驗證並啟用基本驗證,則每次要求受保護的頁面時,您都會持續收到登入對話方塊提示, (請參閱圖 4) 。

圖 4 – 基本驗證登入對話方塊

clip_image008

總結

本教學課程說明如何在 ASP.NET MVC 應用程式的內容中使用Windows 驗證。 您已瞭解如何在應用程式的 Web 組態檔內啟用Windows 驗證,以及如何使用 IIS 設定驗證。 最後,您已瞭解如何使用 [授權] 屬性來限制特定 Windows 使用者或群組的控制器動作存取。