生產網站上的使用者和角色 (C#)

作者 :Scott Mitchell

注意

自本文撰寫以來,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 Web 應用程式設定為使用 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 應用程式的組態資訊,以判斷要使用的提供者;回到設定 使用應用程式服務的網站 教學課程中 ,我們會將書籍評論網站設定為使用 SqlMembershipProviderSqlRoleProvider 提供者。 這需要將 和 <roleManager> 區段新增 <membership>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> 和 區段會分別參考 SqlMembershipProvidertype 屬性中的 和 <roleManager>SqlRoleProvider 提供者。 這些提供者會將使用者和角色資訊儲存在指定的SQL Server資料庫中。 這些提供者所使用的資料庫是由 屬性所 connectionStringName 指定, ReviewsConnectionString 該屬性定義于 檔案中 ~/ConfigSections/databaseConnectionStrings.config 。 回想一下, databaseConnectionStrings.config 開發環境中的檔案包含開發資料庫的連接字串,而 databaseConnectionStrings.config 生產環境中的檔案則包含生產資料庫的連接字串。

簡單地說,WSAT 必須透過開發環境在本機存取,而且它可與檔案中指定的 databaseConnectionStrings.config 資料庫中的使用者和角色資訊搭配使用。 因此,如果我們在開發環境中變更檔案中的 databaseConnectionStrings.config 連接字串資訊,則可以在本機使用 WSAT 來管理生產環境中的使用者和角色。

為了說明這項功能,請在 databaseConnectionStrings.config 開發環境中開啟 Visual Studio 中的檔案,並將開發資料庫連接字串取代為生產資料庫連接字串。 然後啟動 WSAT,移至 [安全性] 索引標籤,然後新增名為 Sam 且密碼為 「password!」 的新使用者, (小於引號) 。 圖 2 顯示建立此帳戶時的 WSAT 畫面。

此螢幕擷取畫面顯示在生產環境中建立的新使用者。

圖 2:在生產環境中建立名為 Sam 的新使用者
(按一下即可檢視完整大小的影像)

由於我們已將 中的 databaseConnectionStrings.config 連接字串變更為指向生產資料庫伺服器,因此 Sam 已新增為生產環境中的使用者。 若要確認這一點,請將檔案中的 databaseConnectionStrings.config 連接字串變更回開發資料庫,然後流覽 Login.aspx 開發環境中的頁面。 嘗試以 Sam (身分登入,請參閱 圖 3) 。

顯示您無法在開發環境中以 Sam 身分登入的螢幕擷取畫面。

圖 3:您無法在開發環境中以 Sam 身分登入
(按一下即可檢視完整大小的影像)

您無法在開發環境中以 Sam 的身分登入,因為使用者帳戶資訊不存在於本機資料庫中。 相反地,已新增至生產資料庫。 若要確認這一點,請檢視開發和生產資料庫中資料表的內容 aspnet_Users 。 在開發環境中,使用者 Scott、Jisun 和 Alice 應該只有三筆記錄。 不過,生產資料庫中的 aspnet_Users 資料表有四筆記錄:Scott、Jisun、Alice 和 Sam。 因此,Sam 可以透過生產環境中的網站登入,但無法透過開發環境登入。

顯示 Sam 可以登入生產網站的螢幕擷取畫面。

圖 4:Sam 可以在生產網站上登入
(按一下即可檢視完整大小的影像)

注意

當您完成使用 WSAT 時,別忘了將檔案中的 databaseConnectionStrings.config 連接字串變更回開發資料庫的連接字串,否則當您透過開發環境測試網站時,將會使用生產資料。 另請記住,雖然我們剛才討論的技術可讓我們使用 WSAT 從遠端系統管理使用者和角色、變更任何其他 WSAT 組態選項 (存取規則、SMTP 設定、偵錯和追蹤設定等等,) 修改 Web.config 檔案。 因此,對設定所做的任何變更會套用至開發環境,而非生產環境。

建立自訂使用者和角色管理網頁

WSAT 提供現成的系統來管理使用者和角色,但只能在本機啟動,而且需要變更連接字串資訊,才能管理生產環境上的使用者和角色。 大部分支援使用者帳戶的網站也包含許多使用者和角色管理網頁,可讓系統管理員從網站內的頁面管理使用者和角色。 這類 Web 型系統管理頁面可讓您更輕鬆地管理使用者和角色,而且對於可能有許多系統管理員或系統管理員無法存取的網站或技術背景,以使用 Visual Studio 來啟動 WSAT。

ASP.NET 包含一些內建的登入相關 Web 控制項,可讓實作其中許多系統管理網頁,就像拖放一樣簡單。 例如,您可以建立頁面,讓系統管理員建立新的使用者帳戶,方法是將 CreateUserWizard 控制項拖曳到頁面並設定幾個屬性。 事實上,在 圖 2 所示的 WSAT 中建立使用者的頁面會使用相同的 CreateUserWizard 控制項,而您可以新增至頁面。 此外,成員資格和角色服務的功能可透過 Membership .NET Framework 中的 和 Roles 類別,以程式設計方式取得。 使用這些類別,您可以撰寫程式碼來建立、編輯和刪除使用者和角色,以及將使用者新增或移除至角色、判斷哪些使用者位於哪些角色,以及執行其他使用者和角色相關的工作。

在 [ 設定使用應用程式服務的網站 ] 教學課程中 ,我已將頁面新增至 Admin 名為 CreateAccount.aspx 的資料夾。 此頁面可讓系統管理員將新的使用者帳戶新增至網站,並指定新建立的使用者是否處於管理員角色 (請參閱圖 5) 。

顯示系統管理員可以建立新使用者帳戶的螢幕擷取畫面。

圖 5:系統管理員可以建立新的使用者帳戶
(按一下即可檢視完整大小的影像)

如需建置使用者和角色管理頁面的詳細資料,以及使用 MembershipRoles 類別和登入相關 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 的需求,並讓各種系統管理使用者從任何電腦使用。

快樂的程式設計!

深入閱讀

如需本教學課程中所討論之主題的詳細資訊,請參閱下列資源: