由 斯科特·米切爾
備註
自本文撰寫以來,ASP.NET 成員資格提供者已被 ASP.NET 身分識別取代。 強烈建議更新應用程式以使用 ASP.NET 身分識別 平臺,而不是本文撰寫時精選的成員資格提供者。 ASP.NET 身分識別在 ASP.NET 成員資格系統中有許多優點,包括:
- 更好的效能
- 改善擴充性和可測試性
- 支援 OAuth、OpenID Connect 和雙因素驗證
- 宣告型身分識別支援
- 提升與 ASP.Net Core 的互操作性
ASP.NET 網站管理工具 (WSAT) 提供 Web 型使用者介面,可用來設定成員資格和角色設定,以及建立、編輯和刪除使用者和角色。 不幸的是,WSAT 只有在從localhost流覽時才能運作,這表示您無法透過瀏覽器連線到生產網站的管理工具。 好消息是,有一些因應措施可讓您管理生產環境上的使用者和角色。 本教學課程會查看這些因應措施和其他方法。
簡介
ASP.NET 2.0 引進了一些 應用程式服務,這是一套建置組塊服務,您可以新增至 Web 應用程式。 我們在設定 使用應用程式服務的網站 教學課程中,將成員資格和角色服務新增回書籍評論網站。 成員資格服務有助於建立和管理用戶帳戶;角色服務提供 API,將使用者分類為群組。 Book Reviews 網站有三個使用者帳戶:Scott、Jisun 和 Alice,並設有單一的管理員角色,其中 Scott 和 Jisun 擔任管理員。
ASP。NET 的應用程式服務不會系結至特定實作。 相反地,您會指示應用程式服務使用特定 提供者,而該提供者會使用特定技術來實作服務。 我們將 Book Reviews 網頁應用程式設定為使用 SqlMembershipProvider 和 SqlRoleProvider 這兩個提供者來提供成員資格服務和角色服務。 這兩個提供者會將用戶帳戶和角色資訊儲存在 SQL Server 資料庫中,而且是裝載於 Web 主控公司之以因特網為基礎的 Web 應用程式最常使用的提供者。
使用成員資格和角色服務的開發人員常見的挑戰是管理生產環境上的使用者和角色。 如何從生產網站刪除用戶帳戶、新增角色,或將現有使用者新增至現有角色? 本教學課程會探索在生產網站上管理使用者和角色的不同技術。
使用 ASP.NET 網站管理工具
ASP.NET 包含 網站管理工具 (WSAT),可讓您輕鬆地建立和管理用戶帳戶和角色,以及指定使用者和角色型授權規則。 若要使用 WSAT,請按兩下 [方案總管] 中的 [ASP.NET 組態] 圖示,或移至 [網站或專案] 功能表,然後選擇 [ASP.NET 組態] 選項。 任一種方法會啟動網頁瀏覽器,並將它指向 WSAT 位址,例如: http://localhost:portNumber/asp.netwebadminfiles/default.aspx?applicationPhysicalPath=pathToApplication
WSAT 分成三個區段:
- 安全性 - 管理使用者、角色和授權規則。
- ApplicationConfiguration - 從這裡管理 <appSettings> 和 SMTP 設定。 您也可以讓應用程式離線並從這裡管理偵錯和追蹤設定,以及指定預設自定義錯誤頁面。
- ProviderConfiguration - 設定應用程式服務所使用的提供者。
[安全性] 區段(如圖 1 所示)包含建立新使用者、管理使用者、建立和管理角色,以及建立和管理存取規則的連結。 您可以從這裡將新角色新增至系統、刪除現有的使用者,或從特定用戶帳戶新增或移除角色。
圖 1:WSAT 安全性區段包含管理使用者和角色的選項
(按兩下以檢視完整大小的影像)
不幸的是,WSAT 只能在本機存取。 您無法在遠端生產網站上流覽 WSAT;如果您造訪 www.yoursite.com/asp.netwebadminfiles/default.aspx ,則會收到 404 找不到回應。 提供 WSAT 功能的程式代碼會使用 Membership .NET Framework 中的 和 Roles 類別來建立、編輯和刪除使用者和角色。 這些類別會參考 Web 應用程式的組態資訊,以判斷要使用的提供者;回到設定 使用應用程式服務的網站 教學課程 中,我們會設定書籍評論網站以使用 SqlMembershipProvider 和 SqlRoleProvider 提供者。 這需要將 <membership> 和 <roleManager> 區段新增至 Web.config。
<?xml version="1.0"?>
<configuration>
...
<connectionStrings configSource="ConfigSections\databaseConnectionStrings.config" />
<system.web>
...
<membership defaultProvider="ReviewMembership">
<providers>
<clear />
<add type="System.Web.Security.SqlMembershipProvider"
name="ReviewMembership"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ReviewRole">
<providers>
<clear />
<add type="System.Web.Security.SqlRoleProvider"
name="ReviewRole"
connectionStringName="ReviewsConnectionString"
applicationName="BookReviews" />
</providers>
</roleManager>
</system.web>
...
</configuration>
請注意,<membership> 和 <roleManager> 區段會在其各自的 SqlMembershipProvider 屬性中分別參考 SqlRoleProvider 和 type 提供者。 這些提供者會將使用者和角色資訊儲存在指定的 SQL Server 資料庫中。 這些提供者所使用的資料庫是由屬性connectionStringName指定的,該屬性是在ReviewsConnectionString檔案中定義的~/ConfigSections/databaseConnectionStrings.config。 回想一下, databaseConnectionStrings.config 開發環境中的檔案包含開發資料庫的連接字串,而 databaseConnectionStrings.config 生產環境中的檔案則包含生產資料庫的連接字串。
簡言之,WSAT 必須透過開發環境在本機存取,而且它可與檔案中所 databaseConnectionStrings.config 指定資料庫中的使用者和角色資訊搭配使用。 因此,如果我們在開發環境上變更檔案中的 databaseConnectionStrings.config 連接字串資訊,我們可以使用WSAT 在本機管理生產環境中的使用者和角色。
為了說明這項功能,請在開發環境上的Visual Studio中開啟 databaseConnectionStrings.config 檔案,並將開發資料庫連接字串取代為生產資料庫連接字串。 然後啟動 WSAT,移至 [安全性] 索引標籤,然後新增名為 Sam 的新使用者。
圖 2 顯示建立此帳戶時的 WSAT 畫面。
圖 2:在生產環境中建立名為 Sam 的新使用者
(按兩下以檢視完整大小的影像)
因為我們將 中的 databaseConnectionStrings.config 連接字串變更為指向生產資料庫伺服器,Sam 已新增為生產環境中的使用者。 若要確認這一點,請將檔案中的 databaseConnectionStrings.config 連接字串變更回開發資料庫,然後流覽 Login.aspx 開發環境中的頁面。 嘗試以 Sam 的身分登入(請參閱 圖 3)。
圖 3:您無法在開發環境中以 Sam 身分登入
(按兩下以檢視完整大小的影像)
您無法在開發環境中以 Sam 身分登入,因為使用者帳戶資訊不存在於本機資料庫中。 相反地,已新增至生產資料庫。 若要確認這一點,請檢視開發和生產資料庫中數據表的內容 aspnet_Users 。 在開發環境中,使用者 Scott、Jisun 和 Alice 應該只有三筆記錄。 不過, aspnet_Users 生產資料庫中的數據表有四筆記錄:Scott、Jisun、Alice 和 Sam。 因此,Sam 可以透過生產環境中的網站登入,但無法透過開發環境登入。
圖 4:Sam 可以在生產網站上登入
(按兩下以檢視完整大小的影像)
備註
當您完成使用 WSAT 時,請記得將檔案中的 databaseConnectionStrings.config 連接字串變更回開發資料庫的連接字串,否則您將透過開發環境測試月臺時使用生產數據。 同時請記住,雖然我們剛才討論的技術可讓我們使用 WSAT 從遠端管理使用者和角色,但對任何其他 WSAT 組態選項的變更(存取規則、SMTP 設定、偵錯和追蹤設定等等)都會修改 Web.config 檔案。 因此,對設定所做的任何變更都適用於開發環境,不適用於生產環境。
建立自定義使用者和角色管理網頁
WSAT 提供現成的系統來管理使用者和角色,但只能在本機啟動,而且需要變更連接字串資訊,才能管理生產環境上的使用者和角色。 支援用戶帳戶的大部分網站也包含許多使用者和角色管理網頁,可讓系統管理員從網站內的頁面管理使用者和角色。 這類網頁式管理頁面讓您更容易管理使用者和角色,對於可能有多位管理員或那些沒有存取或技術背景的管理員的網站來說,是不可或缺的,因為這些頁面能夠取代使用 Visual Studio 啟動 WSAT 的需求。
ASP.NET 包含許多內建的登入相關 Web 控件,可讓實作其中許多系統管理網頁,就像拖放一樣簡單。 例如,您可以將 CreateUserWizard 控件拖曳到頁面並設定幾個屬性,讓系統管理員建立新的用戶帳戶。 事實上,在 圖 2 中顯示的 WSAT 建立使用者的頁面,使用了相同的 CreateUserWizard 控制項,您可以將其新增到您的頁面中。 此外,成員資格和角色服務的功能可透過 Membership .NET Framework 中的 和 Roles 類別,以程序設計方式取得。 使用這些類別,您可以撰寫程式代碼來建立、編輯和刪除使用者和角色,以及將使用者新增或移除至角色、判斷哪些用戶位於哪些角色,以及執行其他使用者和角色相關工作。
在 設定使用應用程式服務的網站 教學 課程中,我已將頁面新增至 Admin 名為 CreateAccount.aspx的資料夾。 此頁面可讓系統管理員將新的用戶帳戶新增至網站,並指定新建立的使用者是否位於管理員角色中(請參閱 圖 5)。
圖 5:系統管理員可以建立新的用戶帳戶
(按兩下以檢視完整大小的影像)
如需建置使用者和角色管理頁面的詳細資訊,以及使用 Membership 和 Roles 類別和登入相關 ASP.NET Web 控件的逐步指示,請務必閱讀我的 網站安全性教學課程。 您可以在這裡找到如何建置網頁以建立新帳戶、建立和管理角色、將使用者指派給角色,以及其他一般系統管理工作的指引。
若要在生產網站上實作類似 WSAT 的功能,您隨時可以建置自己的一系列網頁,以實作 WSAT 的功能。 若要協助開始使用,請查看位於資料夾中 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\ASP.NETWebAdminFiles的 WSAT 原始程式碼。 另一個選擇是使用 Dan Clem 的 WSAT 替代方案,他在他的文章《自製網站管理工具》中進行了分享。 Dan 會逐步引導讀者完成建置自定義 WSAT 類似工具的程式,包括其應用程式的原始碼以下載 (在 C# 中),並提供將自定義 WSAT 新增至託管網站的逐步指示。
總結
ASP.NET 網站管理工具 (WSAT) 可與成員資格和角色應用程式服務搭配使用,以管理網站的使用者和角色資訊。 不幸的是,WSAT 只能在本機存取,無法從您的生產網站訪問。 不過,藉由將開發環境中的連接字串變更為指向生產資料庫,您可以使用WSAT來管理生產網站上的使用者和角色。
雖然 WSAT 方法提供快速且簡單的方法來管理使用者和角色,但它需要從 Visual Studio 啟動 WSAT,以及暫時變更連接字串資訊。 WSAT 提供快速的方式來管理生產環境上的使用者和角色,但對於具有多個系統管理員或沒有或不熟悉 Visual Studio 和 WSAT 的系統管理員的網站而言,運作很麻煩。 基於這些原因,支援用戶帳戶的大部分網站都包含一組系統管理網頁。 這類網頁集可免除 WSAT 的需求,並讓各種系統管理使用者從任何電腦使用。
快樂的程序設計!
進一步閱讀
如需本教學課程中所討論主題的詳細資訊,請參閱下列資源:
- 檢查 ASP。NET 的成員資格、角色和配置檔
- 開發您自己的網站管理工具
- 網站管理工具概觀
- 網站安全性教學課程