逐步解說:根據安全性角色篩選網站導覽節點
更新:2007 年 11 月
網站的一般要求是限制對某些網頁的存取。ASP.NET 角色管理和 ASP.NET URL 授權的組合提供一種根據安全性角色限制存取 Web 檔案的方法。在這個逐步解說中,網站導覽藉由使用稱為安全性調整的功能,根據角色隱藏那些受限制檔案的巡覽連結。
角色是使用者群組的名稱。在建立角色後,您可以將個別使用者帳戶指派給角色。您可以根據角色限制網站導覽中對 Web 檔案和節點的存取。
在此逐步解說期間,您將瞭解如何進行下列作業:
建立具有成員資格和使用者登入的網站。
建立網站的角色並將使用者帳戶指派給角色。
建立選擇性地授與或拒絕對網頁存取的 URL 授權規則。
建立網站導覽並啟用安全性調整。
建立 Web 網頁上的巡覽功能表。
必要條件
若要完成這個逐步解說,您必須進行下列步驟:
Microsoft Visual Web Developer。
.NET Framework。
在本機電腦上安裝網際網路資訊服務 (IIS)。
這個逐步解說還要求識別個別使用者帳戶的方法。在工作應用程式中,您可以使用各種方式識別使用者,包括依據其 Windows 使用者帳戶進行識別。但是,在此逐步解說中,使用者將透過登入您的網站來對其本身進行識別。因此,這個逐步解說需要您具有設定為使用 ASP.NET 成員資格和表單驗證的網站。如果您已經設定了使用成員資格的網站,即可使用該網站做為此逐步解說的起點。
建立具有成員資格和使用者登入的網站
在使用 ASP.NET 成員資格和角色之前,您必須具有可用的網站,然後您需要設定該網站,以啟用成員資格並設定角色。如果您已完成逐步解說:建立具有成員資格和使用者登入的網站,則可以使用您在該逐步解說中設定的網站。
建立網站
如果您已經在 Visual Web Developer 中建立了網站 (例如,逐步解說:在 Visual Web Developer 中建立基本 Web 網頁),可以使用該網站,並繼續進行下一節的步驟。否則,依照下列這些步驟建立新的網站和 Web 網頁。
若要建立本機 IIS 網站
開啟 Visual Web Developer。
在 [檔案] 功能表上,按一下 [新網站]。
[新網站] 對話方塊隨即出現。
請在 [Visual Studio 安裝的範本] 下方,按一下 [ASP.NET 網站]。
在 [語言] 下拉式清單中,按一下您想要操作的程式語言。
在 [位置] 下拉式清單中,選取 [HTTP]。
或者,如果您沒有可用的 IIS 伺服器,則可以選取 [檔案系統]。不過,使用 [HTTP] 可以模擬實際的部署案例,並可讓您藉由在瀏覽器中檢視網頁來測試它們。
按一下 [瀏覽]。
[選擇位置] 對話方塊便會出現。如果您在上一步中選取了 [HTTP],則應當選取 [本機 IIS] 按鈕。如果未選取,則按一下 [本機 IIS]。
選取 [預設的網站] 節點。
按一下 [建立新 Web 應用程式] 圖示 (在右上角),然後將新網站命名為 SiteNavigation。
按一下 [開啟],再按 [確定]。
Visual Web Developer 會建立網站並開啟名為 Default.aspx 的新網頁。根據預設,Visual Web Developer 會建立具有相符程式碼後置 (Code-Behind) 檔案的新網頁,在這種情況下為 Default.aspx.cs。您在使用 [加入新項目] 精靈建立後續新網頁時,可以變更這個設定。
注意事項: 有時,如果在 Visual Web Developer 之前已安裝舊版的 .NET Framework,則可能會在設定網站使用最新版本的 .NET Framework 時遇到錯誤。您可以藉由在出現的對話方塊上按一下 [是] 以啟用伺服器上的 ASP.NET 2.0 版,或藉由使用 IIS 管理員來更正這個錯誤。在「IIS 管理員」中,以滑鼠右鍵按一下您的應用程式、按一下 [屬性],再按 [ASP.NET] 索引標籤。在 [ASP.NET 版本] 旁邊,選取與 Visual Web Developer 一起安裝的 .NET Framework 版本。
啟用成員資格和建立使用者
如果您尚未啟用成員資格,請使用下列程序啟用它。否則,請繼續進行下一節的步驟。
若要啟用成員資格
在 Visual Web Developer 中的 [網站] 功能表上,按一下 [ASP.NET 組態]。
便會出現 [網站管理工具]。
按一下 [安全性] 索引標籤,在 [使用者] 下,按一下 [選取驗證類型],按一下 [從網際網路],再按 [完成]。
這個選項指定您的應用程式將使用表單驗證 (Authentication),進而使用者可以使用稍後在這個逐步解說中建立的登入頁面,登入該應用程式。
在 [安全性] 索引標籤上,按一下 [建立使用者]。
您將為應用程式建立兩個使用者帳戶。
在 [建立使用者] 方塊中,輸入定義應用程式之使用者的資訊。使用下列值做為方針。您可以使用想要的任何值,但請務必記下這些項目以用於稍後的逐步解說。
使用者名稱:使用名稱 Customer01,它是第一個使用者帳戶的名稱。
密碼:使用您選擇的密碼,最好是強式密碼,該密碼最少包含八個字元並且包括大小寫字母以及標點符號。
電子郵件:使用正確格式的電子郵件地址。或者,您可以使用不存在的電子郵件地址,因為這個逐步解說並不包括傳送電子郵件。
安全性問題和安全性解答:輸入稍後復原密碼時需要使用的問題和解答。
選取 [現用使用者] 核取方塊,然後按一下 [建立使用者]。
在確認頁面上,按一下 [繼續]。
重複之前的三個步驟,再建立一個名為 Employee01 的使用者帳戶 (當您為這些使用者帳戶建立角色時,使用的名稱全部為小寫字母)。
按一下頁面右下角的 [上一頁] 按鈕,以返回 [安全性] 起始網頁。
建立使用者登入頁面
若要測試您稍後要在這個逐步解說中設定的成員資格和角色設定,您需要建立可讓使用者登入的方式,以便可以識別他們。
若要為所有使用者建立顯示登入狀態的預設網頁
開啟 Default.aspx 網頁,然後切換至 [設計] 檢視。
如果您沒有 Default.aspx 網頁,則加入一個到網站的根目錄。
注意事項: 請確定將網頁命名為 Default.aspx,稍後在此逐步解說中會使用這個名稱。
在 [工具箱] 中,將 [LoginStatus] 控制項從 [登入] 群組拖曳至網頁。
如果使用者尚未登入,LoginStatus 控制項會自動將他們帶到 Login.aspx 網頁。
將游標放置在 LoginStatus 控制項的右邊,按 ENTER 鍵,然後輸入下列資訊 (包括額外的空格):Hello 。
在 [工具箱] 中,將 [LoginName] 控制項從 [登入] 群組拖曳至網頁。
如果使用者已登入,LoginName 控制項會顯示使用者的名稱。
儲存網頁,然後關閉網頁。
您現在有所有使用者都可以使用的首頁。下一步是建立簡單的登入頁面。
若要建立登入頁面
將名為 Login.aspx 的網頁加入網站的根目錄。
開啟 Login.aspx 網頁,然後切換至 [設計] 檢視。
在 [工具箱] 中,將 [登入] 控制項從 [登入] 群組拖曳至網頁。
以滑鼠右鍵按一下 [登入] 控制項,按一下 [屬性],然後將 [DestinationPageUrl] 設為 [Default.aspx]。
儲存網頁,然後關閉網頁。
建立網站的角色並將使用者指派給角色
在使用安全性調整之前,您必須設定使用者角色。
建立角色
為了讓安全性調整運作,必須啟用角色。
若要啟用角色
在 Visual Web Developer 中的 [網站] 功能表上,按一下 [ASP.NET 組態]。
便會出現 [網站管理工具]。
按一下 [安全性] 索引標籤,再按 [啟用角色]。
建立角色並將使用者帳戶指派給角色
角色現在已啟用,但在您建立角色並將使用者帳戶指派給角色之前,無法建立存取規則。
若要建立角色並指派使用者帳戶
如果網站管理工具未開啟,請遵循下列步驟開啟它:在 Visual Web Developer 中的 [網站] 功能表上,按一下 [ASP.NET 組態]。
便會出現 [網站管理工具]。
按一下 [安全性] 索引標籤,再按 [建立或管理角色]。
您將建立兩個角色。
在 [建立新角色] 方塊中,輸入 customers,然後按一下 [加入角色]。
重複之前的步驟,以建立名為 employees 的角色。
在 [角色名稱] 方塊中的 [customers] 旁,按一下 [管理]。
在開啟的網頁中,您可從清單選取要加入 [customers] 角色的使用者帳戶。
在 [搜尋使用者] 方塊中,按一下 [全部]。
這會顯示您網站的所有使用者帳戶。如果您的清單太長,則還可以按照使用者名稱的第一個字母進行搜尋。
在使用者名稱 [Customer01] 旁,選取 [使用者在角色中] 欄中的方塊。
使用者 Customer01 現在是 customers 角色的成員。
按一下 [上一頁] 返回 [建立新角色] 頁面。
重複之前的兩個步驟,以將使用者 Employee01 加入 employees 角色。
關閉 ASP.NET 應用程式管理頁面。
建立選擇性授與或拒絕對網頁存取的規則
為了測試安全性調整,您需要為網站建立一些資料夾和網頁,然後設定那些資料夾和網頁的安全性權限。
建立這個逐步解說所需的資料夾和網頁
您的網站將包含連結到幾個網頁的網站導覽結構,您現在就可以建立這些網頁。
若要建立所需的資料夾和網頁
在 [方案總管] 中,以滑鼠右鍵按一下網站的根目錄,按一下 [新增資料夾],然後將資料夾命名為 EmployeesOnly。
[EmployeesOnly] 資料夾將包含只可由部分使用者存取的網頁。
以滑鼠右鍵按一下網站的根目錄,按一下 [新增資料夾],然後將資料夾命名為 Customers。
[Customers] 資料夾也將包含只可由部分使用者存取的網頁。
在 [EmployeesOnly] 資料夾中,建立名為 Discounts.aspx 的新網頁。
在 [Customers] 資料夾中,建立名為 Support.aspx 的新網頁。
在您網站的根目錄中,建立名為 Hardware.aspx、Software.aspx、Training.aspx 和 Consulting.aspx 的四個新網頁。
在您建立的每個新網頁中,切換至 [設計] 檢視,輸入頁面頂端的網頁標題,然後將標題格式化為 [<H1>],以便您可以在瀏覽網頁時識別它。
儲存新網頁,然後關閉它們。
建立存取規則
您建立的網站將允許使用者根據其角色取得對不同網頁的存取權。因此,您需要建立一些存取規則,以判斷哪些角色可以存取哪些資料夾。
若要設定 EmployeesOnly 資料夾的存取規則
在 Visual Web Developer 中的 [網站] 功能表上,按一下 [ASP.NET 組態]。
便會出現 [網站管理工具]。
在 [安全性] 索引標籤上,按一下 [管理存取規則],再按 [加入新存取規則]。這會將您帶至 [加入新存取規則] 頁面。
在 [選取此規則的目錄] 下,展開根節點,然後按一下 [EmployeesOnly]。
在 [規則套用對象] 下,按一下 [角色],然後在方塊中按一下 [employees]。
請在 [使用權限] 下方,選取 [允許]。
您所建立的規則會授與 employees 角色中所有使用者對 [EmployeesOnly] 資料夾的存取權限。
按一下 [確定]。
新規則會顯示在 [管理存取規則] 表格的方格中。使用者從 [EmployeesOnly] 資料夾要求網頁時,會從上到下按照順序檢查規則,以判斷是否允許使用者存取該網頁。如果使用者不是 employees 角色的一部分,則不會顯示這個資料夾中的網頁。
按一下 [加入新的存取規則] 連結。
在 [規則套用對象] 下方,選取 [所有使用者]。
在 [使用權限] 下方,選取 [拒絕],然後按一下 [確定]。
[EmployeesOnly] 資料夾的第二個規則確保除了 employees 角色中的使用者之外,沒有任何人可以存取該資料夾。這些規則會如您在方格中所見的順序,從上到下依序處理。
第一個規則 (允許) 會對 employees 角色中的使用者授與存取權限。第二條規則 (Deny) 會拒絕對其他所有使用者的存取。您可以盡量針對應用程式建立所需要的「允許」或「拒絕」規則。使用者從 [EmployeesOnly] 資料夾要求網頁時,會從上到下按照順序檢查規則,以判斷是否允許使用者存取該網頁。
下一步會對 [Customers] 資料夾重複之前的程序。不過,customers 和 employees 角色都可以取得對 [Customers] 資料夾的存取權。例如在實際案例中,公司可能希望電話支援員工能夠存取客戶可以看到的同一些網頁。
若要設定 Customers 資料夾的存取規則
按一下 [加入新的存取規則] 連結。
在 [規則套用對象] 下方,選取 [角色] 方塊,然後在方塊中按一下 [customers]。
在 [使用權限] 下方,選取 [允許],然後按一下 [確定]。
您所建立的規則會授與 customers 角色中所有使用者對 [Customers] 資料夾的存取權限。
在 [管理存取規則] 下方,按一下 [Customers]。
按一下 [加入新的存取規則] 連結。
在 [規則套用對象] 下方,選取 [角色] 方塊,然後在方塊中按一下 [employees]。
在 [使用權限] 下方,選取 [允許],然後按一下 [確定]。
您所建立的規則也會授與 employees 角色中所有使用者對 [Customers] 資料夾的存取權限。
在 [管理存取規則] 下方,按一下 [Customers]。
按一下 [加入新的存取規則] 連結。
在 [規則套用對象] 下方,選取 [所有使用者] 方塊。
在 [使用權限] 下方,選取 [拒絕] 方塊,然後按一下 [確定]。
[Customers] 資料夾的第一個和第二個規則確保除了 customers 角色或 employees 角色中的使用者帳戶之外,沒有任何人可以存取 [Customers] 資料夾。這些規則會從頂端到底部,依照順序處理,如您在方格中所見的順序。
第一個規則 (允許) 會對成員角色中的使用者帳戶授與存取權限。第二條規則 (Deny) 會拒絕對其他所有使用者的存取。您可以盡量針對應用程式建立所需要的「允許」或「拒絕」規則。使用者從 [Customers] 資料夾要求網頁時,會從上到下按照順序檢查規則,以判斷是否允許使用者存取該網頁。
按一下 [完成] 以返回 [安全性] 索引標籤。
建立網站導覽並啟用安全性調整
在逐步解說的這個部分中,您將建立網站導覽以描述網站的巡覽結構 (Navigation Structure),然後編輯 Web.config 檔啟用網站導覽節點的安全性調整。
建立網站導覽
若要使用站台巡覽,您需要一種方法描述如何配置網站的網頁。預設方法是建立包含網站階層的 XML 檔,該網站階層包含網頁標題和 URL。
每個網頁都表示為網站導覽中的 siteMapNode 項目。最上層的節點表示首頁,而子節點則表示網站深層的網頁。
若要建立網站導覽
在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按 [加入新項目]。
在 [加入新項目] 對話方塊中:
在 [Visual Studio 安裝的範本] 下,按一下 [網站導覽]。
請確定 [名稱] 方塊中的名稱為 Web.sitemap。
注意事項: 檔案必須命名為 Web.sitemap,而且必須出現在網站的根目錄中。
按一下 [加入]。
複製下列 XML 內容至 Web.sitemap 檔中,覆寫 XML 檔的預設內容。
<?xml version="1.0" encoding="utf-8" ?> <siteMap> <siteMapNode title="Home" description="Home" url="~/default.aspx" > <siteMapNode title="Products" description="Our products" roles="*"> <siteMapNode title="Hardware" description="Hardware we offer" url="~/Hardware.aspx" /> <siteMapNode title="Software" description="Software for sale" url="~/Software.aspx" /> <siteMapNode title="Discounts" description="Employee Discounts" url="~/EmployeesOnly/Discounts.aspx" /> </siteMapNode> <siteMapNode title="Services" description="Services we offer" roles="*"> <siteMapNode title="Training" description="Training" url="~/Training.aspx" /> <siteMapNode title="Consulting" description="Consulting" url="~/Consulting.aspx" /> <siteMapNode title="Support" description="Support" url="~/Customers/Support.aspx" /> </siteMapNode> </siteMapNode> </siteMap>
Web.sitemap 檔包含一組巢狀 (Nest) 為三層的 siteMapNode 項目。每一個項目的結構都相同,唯一的差異是它們在 XML 階層架構中的位置不同。
範例 XML 檔中定義之網頁的 URL 不合格,這意味著會將所有網頁視為具有相對於應用程式根目錄的 URL。然而,您可為指定的網頁指定任何 URL,也就是說,您在網站導覽中定義的邏輯結構無需與資料夾中網頁的實體配置相符。
roles 屬性 (Attribute) 只會在網站導覽中的兩個節點上設定:產品和服務。這兩個節點沒有 url 屬性。ASP.NET 使用 .aspx 網頁的存取規則,以驗證使用者是否可以看到網站導覽節點。沒有 url 屬性,任何使用者在啟用安全性調整的情況下都無法檢視網頁。將 roles 屬性設為星號 (*) 或萬用字元會將存取權展開為所有人。
儲存檔案,然後關閉檔案。
啟用安全性調整
您所建立的網站導覽使用預設網站導覽提供者 XmlSiteMapProvider。因此,Web.config 檔無需包含 siteMap 項目 (ASP.NET 設定結構描述) 項目,因為 ASP.NET 具有預設網站導覽的內建 (Intrinsic) 組態。然而,預設並不會啟用安全性調整,因此必須設定 siteMap 項目 (ASP.NET 設定結構描述) 項目。
若要啟用安全性調整
在 Visual Web Developer 中,以滑鼠右鍵按一下網站的根目錄,再按 [重新整理資料夾]。
Web.config 檔便會出現在 [方案總管] 中。正如之前我們在這個逐步解說中所做的那樣,您可以藉由選取 [加入新項目] 或使用 [ASP.NET 組態] 工具建立 Web.config 檔。
開啟 Web.config 檔。
如果 siteMap 項目 (ASP.NET 設定結構描述) 項目已存在,請找到它。
如果 siteMap 項目 (ASP.NET 設定結構描述) 項目不存在,請將下列程式碼貼入 system.web 項目 (ASP.NET 設定結構描述) 項目中,注意不要將它貼入任何其他項目中。
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> <providers> <add name="XmlSiteMapProvider" description="Default SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" /> </providers> </siteMap>
儲存 Web.config 檔案,然後將其關閉。
安全性調整功能會在每個要求上使用 URL 授權,判斷使用者是否具有與 siteMapNode 項目相關聯之 URL 的存取權限。這項額外的工作會視授權的節點數量而降低效能。當啟用安全性調整時,您可以使用下列方法改善效能:
在網站導覽檔案中限制節點數量 使用 150 個節點以上的網站導覽檔案,要花費較長的時間來執行安全性調整作業。
在 siteMapNode 項目上明確地設定角色屬性 請注意,將 roles 屬性設為星號 (*) 應當用於可以安全地顯示給任何用戶端的節點。當使用者屬於屬性列出的角色之一時,roles 屬性的存在可以讓 ASP.NET 略過與 siteMapNode 相關聯的 URL 授權。
建立網頁上的巡覽功能表
既然已經具有網站導覽和部分網頁,您就可以將巡覽加入網站。
或者,您可以使用 SiteMapPath 或 Menu 控制項顯示網站巡覽。如需詳細資訊,請參閱 ASP.NET 巡覽控制項或逐步解說:將網站巡覽加入至網站中。
使用 TreeView 控制項建立巡覽功能表
您將使用 TreeView 控制項做為可摺疊的巡覽功能表。
若要加入巡覽功能表
開啟 Default.aspx 網頁,然後切換至 [設計] 檢視。
在 [工具箱] 中,將 [SiteMapDataSource] 控制項從 [資料] 群組拖曳至網頁。
在預設組態中,SiteMapDataSource 控制項會從您先前建立的 Web.sitemap 檔中取得其資訊,因此您無需為該控制項指定任何其他資訊。
在 [工具箱] 中,將 [TreeView] 控制項從 [巡覽] 群組拖曳至網頁。
[TreeView 工作] 功能表隨即出現。
在 [TreeView 工作] 功能表上的 [選擇資料來源] 方塊中,按一下 [SiteMapDataSource1]。
儲存 Web 網頁。
使用 SiteMapPath 控制項建立巡覽功能表
您將使用 SiteMapPath 控制項做為向使用者顯示回到根網頁之路徑的 breadcrumb 樣式巡覽顯示。
若要加入巡覽功能表
開啟 Hardware.aspx 網頁,然後切換至 [設計] 檢視。
為了說明 SiteMapPath 控制項如何運作,請將控制項放置在深層巢狀的網頁中。
如果您已在此頁的 <H1> 標記中加入標題,請將游標放置在右邊並按 ENTER 鍵。
在 [工具箱] 中,將 [SiteMapPath] 控制項從 [巡覽] 群組拖曳至網頁。
[SiteMapPath 工作] 功能表隨即出現,但是無需設定資料來源。
儲存 Web 網頁。
測試安全性調整
現在可以測試您的網站。
若要測試安全性調整
切換至 Default.aspx 網頁,然後按 CTRL+F5 執行該頁。
在 TreeView 控制項中,您不應看到 [折扣] 或 [支援] 連結。
按一下 [登入]。
做為 Customer01 登入,它是 customers 角色的使用者帳戶。
在 TreeView 控制項中,您現在應該看到 [支援] 連結。
按一下 [登出],再按 [登入]。
做為 Employee01 登入,它是 employees 角色的使用者帳戶。
在 TreeView 控制項中,您現在應該同時看到 [折扣] 連結和 [支援] 連結。做為員工,您應看到所有可用的連結,因為任何連結都不對員工加以限制。
在 Default.aspx 網頁上,按一下 [硬體],您便可以看到 SiteMapPath 控制項。
SiteMapPath 控制項應顯示從首頁到 Hardware 網頁的路徑。
在網站的目前狀態中,巡覽樹狀目錄只在首頁上出現。您可以對應用程式中的每個頁面加入相同的 SiteMapDataSource 和 TreeView 控制項,以便在每個頁面上都顯示巡覽功能表。或者,您可以將巡覽樹狀目錄放置在主版頁面上,以便它會自動與主版頁面檔參考的每一個網頁一同出現。
後續步驟
這個逐步解說說明 ASP.NET 站台巡覽的基本功能:巡覽控制項、角色管理和安全性調整。您可能會想要實驗其他的巡覽功能。例如,您可能想要將巡覽控制項放置在主版頁面中,以讓它們出現在參考主版頁面的所有網頁上。如需詳細資訊,請參閱逐步解說:在 Visual Web Developer 中建立和使用 ASP.NET 主版頁面。