網站有一個常見的要求:特定的頁面僅允許某些成員或其他經過身分識別驗證的使用者瀏覽。這種情況下,應用程式必須提示使用者輸入名稱和密碼。應用程式還必須包括對匿名使用者(未登入使用者)隱藏資訊的方法。本演練示範如何使用 ASP.NET 控制項和 ASP.NET 成員資格服務建立執行所有這些任務的應用程式。有關更多資訊,請參見。
本演練涉及的任務包括:
配置應用程式以包括 ASP.NET 成員資格服務,以及如何定義使用者。
使用登入控制項擷取使用者憑證和向登入使用者顯示資訊。
保護應用程式中的一頁或多頁,以便只有登入使用者可以查看這些頁。
允許新使用者在網站上註冊。
允許成員更改和重設其密碼。
先決條件
若要完成本演練,您需要:
Microsoft Visual Web Developer。
在本機電腦上安裝的 Microsoft Internet 資訊服務 (IIS)。
Microsoft 資料訪問組件 (MDAC) 2.7 版或更高版本。如果您使用的是 Microsoft Windows XP 或 Windows Server 2003,那麼您已經有了 MDAC 2.7。但是,如果使用的是 Microsoft Windows 2000,您可能需要升級您電腦上已經安裝的 MDAC。有關更多資訊,請參見位於
MSDN Library
上的文章“Microsoft Data Access Components (MDAC) Installation”(Microsoft 資料訪問組件 (MDAC) 安裝)。
對可轉寄電子郵件的電子郵件伺服器的訪問權。(伺服器不需要能夠接收訊息)。IIS 包括預設的 SMTP 虛擬伺服器,即一個適用於本演練的郵件伺服器。有關配置該伺服器的更多資訊,請參見。如果使用的是區域網路,請與網路系統管理員聯絡,擷取有關訪問電子郵件伺服器的資訊。
建立網站
如果已經在 Microsoft Visual Studio 中建立一個網站(例如,通過使用演練:在 Visual Web Developer 中建立基本網頁主題),可以使用該網站並跳至本演練稍後部分的“配置成員資格”。否則,按照下面的步驟建立一個新的網站和網頁。
建立本地 IIS 網站
開啟 Visual Studio。
在[檔案] 功能表上單擊“建立網站”。
出現“建立網站”對話方塊。
在“Visual Studio 已安裝的模板”下選擇“ASP.NET 網站”。
在“位置”列表框中選擇“HTTP”。單擊“瀏覽”。
出現“選擇位置”對話方塊。
選擇“本地 IIS”。
開啟“本地 Web 服務器”。
選擇“預設網站”。
單擊網站列表上面的“建立新 Web 應用程式”表徵圖 (),然後將新的網站命名為 membership。
單擊“開啟”。
關閉“選擇位置”對話方塊。
在“語言”框中,單擊您想使用的程式設計語言。
您選擇的程式設計語言將是網站的預設語言,但您可以為每個頁面分別設定程式設計語言。
在“建立網站”對話方塊中單擊“確定”。
Visual Web Developer 建立該網站和一個名為 Default.aspx 的新頁。
配置成員資格
在本演練的稍後部分中,將頁面放置到受保護的子目錄中。現在必須建立子目錄,以便在本演練的稍後部分中可以為其配置安全性。
向網站添加新檔案夾
在“方案總管”中,右擊網站的名稱,再單擊“建立檔案夾”。
將檔案夾命名為 MemberPages。
在使用 ASP.NET 成員資格之前,必須配置應用程式以啟用成員資格和設定使用者。可以使用網站管理工具,該工具提供了一個用於配置設定的類似嚮導的介面。
在本演練中,定義單個使用者。
建立成員資格使用者
在“網站”菜單上單擊“ASP.NET 配置”。
選擇“安全”選項卡,單擊指向“使用安全設定嚮導按部就班地配置安全性”的連結,再單擊“下一步”。
繼續執行嚮導的第 2 步並選擇“通過 Internet”選項。
該嚮導顯示一頁,從該頁中您可以選擇網站使用的驗證方法。該選項指定應用程式將使用 Forms 身分識別驗證,意味著使用者將使用在本演練稍後部分中建立的登入頁登入應用程式。
單擊“下一步”。
該嚮導會顯示一條訊息,表明將使用“進階提供者設定”儲存使用者資訊。預設情況下,成員資格資訊儲存在網站上 App_Data 檔案夾的 Microsoft SQL Server 速成版資料庫檔案中。
單擊“下一步”。
該嚮導顯示建立角色的選項。將在本演練的稍後部分中單獨執行此步驟。因此,不要選擇“為此網站啟用角色”複選框。
單擊“下一步”。
該嚮導顯示一頁,您可以在該頁中建立新使用者。
輸入定義應用程式使用者的資訊。將下面的值用作準則(可以使用任何想要的值,但是請記下使用的項以便在本演練稍後部分中使用)。
“使用者名稱” 您的名稱(不要有空格),或樣本名稱。
“密碼” 密碼。需要嚴格的密碼(該密碼包括大寫和小寫字母以及標點,且長度至少為八個字元)。
“電子郵件” 您的個人電子郵件地址。在本演練的稍後部分中,將給您自己發送一則電子郵件,因此需要一個合法的電子郵件地址。
“安全提示問題”和“安全答案” 鍵入可在以後需要恢複密碼時使用的問題和答案。
單擊“建立使用者”。
該嚮導顯示確認頁。
在本演練前面建立了一個名為“MemberPages”的檔案夾。在演練的此部分中,將建立一條規則,確保只有登入使用者才可以訪問該檔案夾中的頁面。
設定 MemberPages 子目錄的訪問規則
在嚮導中單擊“下一步”。
該嚮導顯示一頁,使您可以建立訪問規則。
在“添加新訪問規則”框中,展開網站的節點。
選擇“MemberPages”,即前面建立的檔案夾。
在“規則應用於”下選擇“匿名使用者”。
在“許可權”之下選擇“拒絕”。
正在建立的規則拒絕匿名使用者(即未登入的使用者)的訪問。
單擊“添加此規則”。
新的規則顯示在下面的網格中。當使用者請求“MemberPages”子目錄中的頁面時,即會檢查該規則以確定是否允許該使用者訪問該頁面。
單擊“完成”。
現在已完成該嚮導。嚮導關閉並返回到網站管理工具的“安全”選項卡。
配置應用程式的電子郵件設定
在本演練的這部分,應用程式需要能夠寄送電子郵件。若要發送訊息,應用程式必須能夠訪問簡易郵件傳輸通訊協定 (SMTP) 伺服器,該伺服器將來自該應用程式的電子郵件轉寄給電子郵件收件者。
IIS 包括作為可選組件的預設 SMTP 虛擬伺服器,該伺服器適用於本演練。有關配置該伺服器的更多資訊,請參見。如果使用的是區域網路,請與網路系統管理員聯絡,擷取有關訪問電子郵件伺服器的資訊。
設定或確定如何訪問 SMTP 伺服器之後,必須配置應用程式將電子郵件路由到該伺服器。可以通過在網站的 Web.config 檔案中產生項來完成上述操作,該檔案包含一系列確定應用程式運行方式的設定。
配置應用程式以使用特定 SMTP 伺服器
在網站管理工具中單擊“應用程式”選項卡。
在 SMTP 設定下單擊“配置 SMTP 電子郵件設定”。
該工具顯示一頁,您可以在該頁中配置電子郵件。
如果使用的是您電腦上的 SMTP 虛擬伺服器,則輸入 localhost 作為“伺服器名稱”;否則,輸入適當的伺服器名稱。
根據 SMTP 伺服器的要求,包括連接埠號碼和身分識別驗證的資訊。有關如何配置這些設定的更多資訊,請與管理員聯絡。
在“寄件者”框中,鍵入有效電子郵件地址。
單擊“儲存”,然後在確認頁中單擊“確定”。
網站管理工具使用所做的設定建立 Web.config 檔案(如果此檔案不存在)。
注意 |
在重新整理該視圖之前,Web.config 檔案不會顯示在方案總管中。 |
關閉網站管理工具。
使用者登入
作為應用程式的一部分,需要建立使用者標識,以便應用程式可以根據使用者類別執行操作(如顯示或隱藏資訊)。若要擷取使用者標識,則要讓使用者登入。
在本演練中,將在首頁上添加一個連結以使使用者進入登入頁,然後建立該登入頁。
使用登入按鈕建立首頁
開啟或切換到網站的 Default.aspx 頁。(如果沒有 Default.aspx 頁,則可以添加該頁或使用其他頁。)
切換到“設計”視圖。
鍵入靜態文本(如“歡迎訪問我們的網站”),然後在“格式”工具列中使用“塊格式”下拉式清單將該文本的格式設定為標題 1。
從“工具箱”的“登入”組中,將 控制項拖動到頁面上。
預設情況下,LoginStatus 控制項呈現為連結。使用者單擊該控制項後,應用程式將顯示登入頁。現在可以建立登入頁。
建立登入頁
在“方案總管”中,右擊 Web 應用程式並選擇“添加新項”。將名為 Login.aspx 的“Web Form”添加到網站。
注意 |
在本演練中,該頁名稱必須為 Login.aspx。預設情況下,將 Forms 身分識別驗證配置為使用具有該名稱的頁面。雖然在本演練中不會這樣做,但是可以更改 Web.config 檔案中的預設登入頁(將使用者重新導向到的頁面)。 |
在 Login.aspx 頁上切換到“設計”視圖。
從“工具箱”的“登入”組中,將 控制項拖動到頁面上。
Login 控制項是一個提示使用者輸入憑據並進行驗證的單個控制項。
顯示登入錯誤
Login 控制項包括驗證以協助使用者輸入正確的資訊。例如,如果使用者跳過密碼,則驗證程式控制項在“密碼”框旁邊顯示星號 (*)。通過向頁面添加 控制項,可以提供有關登入錯誤的更完整資訊。
顯示詳細的登入錯誤
從“工具箱”的“驗證”組中,將 ValidationSummary 控制項拖動到頁面上。
在 ValidationSummary 控制項的“屬性”視窗中,將 屬性設定為 Login1(以前添加的 Login 控制項的預設 ID)。
顯示有關登入使用者的資訊
現在修改首頁以根據使用者是否登入來自訂顯示。匿名使用者將看到一條邀請他們登入的一般訊息。登入使用者將看到一則包含他們的登入名稱的歡迎訊息。
自訂登入使用者的顯示
切換到或開啟 Default.aspx 頁。
從“工具箱”的“登入”組中,將 控制項拖動到頁面上。
顯示 LoginView 控制項,並開啟其 AnonymousTemplate 模板。該模板使您可以定義使用者在登入前將看到的內容。
單擊 LoginView 控制項的編輯地區以啟用編輯。
在 LoginView 控制項的 AnonymousTemplate 模板的編輯地區中,鍵入“您尚未登入,請單擊登入連結以登入。”
在“LoginView 任務”面板的“視圖”列表中,單擊“LoggedInTemplate”。如果沒有看到“LoginView 任務”模板,請右擊 LoginView 控制項的標題並選擇“顯示智能標記”。
現在定義將向已經登入的使用者顯示的內容。
單擊 LoginView 控制項的編輯地區以啟用編輯,然後鍵入 You are logged in. Welcome,。
從“工具箱”的“登入”組中,將 控制項拖動到模板中的文本後面。
測試登入
現在可以測試應用程式的登入能力。
測試登入
在“方案總管”中,右擊“Default.aspx”並單擊“設為起始頁”。
這樣將配置網站,以便運行該網站時首先出現 Default.aspx 頁。
按 Ctrl+F5 以運行網站。
首頁 (Default.aspx) 出現在瀏覽器中,並顯示“登入”連結和一般訊息。
單擊“登入”連結。
顯示建立的登入頁。
鍵入在本演練前面建立的使用者登入名稱,然後單擊“登入”。(不要輸入密碼。)
星號 (*) 顯示在“密碼”框的旁邊,而且一條錯誤資訊顯示在 ValidationSummary 控制項中。
鍵入使用者名稱和密碼,然後單擊“登入”。
如果輸入正確的憑據,會返回到首頁。該頁現在顯示“登出”連結、您的使用者名稱和為登入使用者定義的歡迎訊息。
關閉瀏覽器。
限制對成員專用頁面的訪問
許多網站的一個典型任務是配置頁面,以便只有登入使用者才可以查看這些頁面。在本演練前面,建立了“MemberPages”子目錄,並建立了限制訪問子目錄中頁面的規則。在演練的此節中,將頁添加到受保護的子目錄並測試訪問規則。
建立成員專用頁面
在“方案總管”中,右擊“MemberPages”檔案夾,單擊“添加新項”,再添加一個名為 Members.aspx 的新“Web Form”。
注意 |
請確保在“MemberPages”檔案夾中建立該頁面。 |
在“設計”視圖中,向頁面添加文本(如“各位會員,歡迎光臨!”)確切的文本無關緊要,只要在瀏覽器中看到該頁時能夠識別該頁就可以。
現在可以添加從首頁指向成員專用頁面的連結。在實際的應用程式中,可能要將指向只供成員使用的頁面的連結放置到 LoginView 控制項的登入模板中。這樣,網站的訪問者在登入之前看不到這種連結。但是在本演練中,將使該連結對所有的使用者可用,以便可以看見不先登入就試圖查看成員專用頁面的效果。
添加指向成員專用頁面的連結
切換到或開啟 Default.aspx 頁。
從“工具箱”的“標準”組中,將 控制項拖動到頁面上。
在 HyperLink 控制項的“屬性”視窗中,將 屬性設定為 Members page 和將 屬性設定為 ~/MemberPages/Members.aspx,以指向以前建立的頁面。
測試成員專用頁面
可以通過以匿名使用者身份和登入使用者身份訪問成員專用頁面,來測試此頁面。
測試成員專用頁面
按 Ctrl+F5 以運行網站。
Default.aspx 頁出現在瀏覽器中時,不要登入。相反,單擊“Members page”連結。
您將被重新導向到 Login.aspx 頁,因為拒絕匿名使用者存取只供成員使用的頁面。
在登入頁上,鍵入在本演練前面部分中使用的使用者名稱和密碼進行登入。
您將被重新導向到 Members.aspx 頁,因為登入使用的使用者名稱已被授權訪問該頁。
關閉瀏覽器視窗。
建立新使用者
在演練的第一部分中,已使用網站管理工具建立使用者。如果使用的是一個小的已定義的使用者列表(例如為較小的團隊建立使用者時),則該策略非常有用。但是,很多網站允許使用者自己註冊。ASP.NET 包括 控制項,該控制項執行的任務與您在前面使用網站管理工具執行的任務相同。
在演練的本部分中,將添加一個允許使用者在網站上註冊的功能。首先將建立註冊頁。
建立註冊頁
在“方案總管”中,右擊網站的名稱,單擊“添加新項”,再添加一個名為 Register.aspx 的新“Web Form”。
注意 |
請確保在網站的根目錄中建立該頁,而不是在“MemberPages”檔案夾中。 |
在 Register.aspx 頁上,切換到“設計”視圖並在頁面上鍵入靜態文本(如“註冊”)。在“格式”工具列中,使用“塊格式”下拉式清單將該文本的格式設定為標題 1。
從“工具箱”的“登入”組中,將 CreateUserWizard 控制項拖動到頁面上。
在 CreateUserWizard 控制項的“屬性”視窗中,將 屬性設定為 ~/Default.aspx。
這將配置該控制項,以便建立使用者之後使用者單擊“繼續”時,控制項可以返回到首頁。
從“工具箱”的“標準”組中,將 HyperLink 控制項拖動到頁面上。在 HyperLink 控制項的“屬性”視窗中,將 Text 屬性設定為 Home,並將 NavigateUrl 屬性設定為 ~/Default.aspx。
現在可以添加一個指向首頁的連結,該首頁顯示註冊頁。在本演練中,假定只向未登入的使用者顯示註冊連結。
在首頁上建立註冊連結
切換到或開啟 Default.aspx 頁。
右擊以前添加的 LoginView 控制項,然後選擇“顯示智能標記”。在“LoginView 任務”面板中選擇“視圖”列表框中的“AnonymousTemplate”,以啟用匿名模板中的編輯。
從“工具箱”的“標準”組中,將 HyperLink 控制項拖動到匿名模板上。在 HyperLink 控制項的“屬性”視窗中,將 Text 屬性設定為 Register,並將 NavigateUrl 屬性設定為 Register.aspx。“註冊”連結只向未登入使用者顯示。
現在可以測試註冊過程。
測試註冊
按 Ctrl+F5 以運行網站和顯示 Default.aspx 頁。
因為尚未登入,所以顯示包含“註冊”連結的頁面。
單擊“註冊”連結。
顯示註冊頁。
在文字框中,輸入新的使用者名稱、嚴格的密碼、電子郵件地址和安全提示問題和答案。(這五項資訊均為必選。)
單擊“建立使用者”。
顯示確認訊息。
單擊“繼續”按鈕。
以登入使用者的身份返回到首頁。請注意,“登入”連結已更改為“登出”,而且在 Login 控制項中顯示的資訊來自 屬性,而不是來自 屬性。
單擊“登出”連結。
頁面更改為顯示適用於匿名使用者的資訊。
單擊“登入”連結。
輸入剛才建立的使用者的憑據。
以新使用者的身份登入。
關閉瀏覽器視窗。
更改密碼
有時候使用者可能想要更改密碼,但是手動執行該任務通常不太實際。因此,可以使用另一個 ASP.NET 控制項使使用者可以自己更改密碼。若要更改密碼,則使用者必須知道現有密碼。
在本演練中,將添加一個頁面,登入使用者可以在此頁面更改其密碼。
建立密碼更改頁
在“方案總管”中,右擊“MemberPages”檔案夾,單擊“添加新項”,再添加一個名為 ChangePassword.aspx 的新“Web Form”。
注意 |
請確保在“MemberPages”檔案夾中建立該頁面。 |
將該頁放置到成員專用檔案夾,因為只有登入使用者才可以更改其密碼。
在 ChangePassword.aspx 頁上,切換到“設計”視圖並鍵入靜態文本(如“更改密碼”)。在“格式”工具列中,使用“塊格式”下拉式清單將該文本的格式設定為標題 1。
從“工具箱”的“登入”組中,將 控制項拖動到頁面上。
在 ChangePassword 控制項的“屬性”視窗中,將 屬性設定為 ~/Default.aspx
這將配置該控制項,以便使用者更改密碼之後單擊“繼續”時控制項可以返回到首頁。
現在可以添加一個指向首頁的連結,該首頁顯示密碼更改頁。將使該連結只對登入使用者可用。
在首頁上建立密碼更改連結
切換到或開啟 Default.aspx 頁。
右擊 LoginView 控制項,然後單擊“顯示智能標記”。在“LoginView 任務”菜單的“視圖”列表中,單擊“LoggedInTemplate”。
這將把 LoginView 控制項切換到向登入使用者顯示的內容的編輯模式。
從“工具箱”的“標準”組中,將 HyperLink 控制項拖動到編輯地區。在 HyperLink 控制項的“屬性”視窗中,將 Text 屬性設定為 Change password,將 NavigateUrl 屬性設定為 ~/MemberPages/ChangePassword.aspx。
“更改密碼”連結將只對登入使用者顯示,這與以前建立的“註冊”連結相反。
現在可以測試密碼更改過程。
測試密碼更改
按 Ctrl+F5 以運行網站。
在 Default.aspx 頁上單擊“登入”連結,並以已建立的使用者的身份登入。
完成之後,以登入使用者的身份返回到首頁。
單擊“更改密碼”連結。
在密碼更改頁,輸入舊密碼和新密碼,然後單擊“更改密碼”。
單擊“繼續”。
在首頁上單擊“登出”。
單擊“登入”連結。
輸入新密碼。
這樣就使用新密碼登入。
關閉瀏覽器視窗。
恢複密碼
有時使用者會忘記密碼。可以向網站添加密碼恢複頁,以便使用者可以再次登入網站。可以使用兩種形式恢複密碼:
注意 |
對於需要進階別的安全性的網站,建議不使用電子郵件返回明文形式的密碼。對於高安全性網站,建議使用加密的方式(如安全通訊端層 (SSL))返回密碼。 |
預設情況下,ASP.NET 成員資格系統通過使用雜湊演算法產生密碼以確保其安全,這樣做意味著密碼不可以恢複。因此,在演練的本部分中,網站將向使用者發送新密碼。
注意 |
要恢複密碼,網站必須可以寄送電子郵件。如果不能夠配置網站以寄送電子郵件(如此演練前面的“配置應用程式的電子郵件設定”中所解釋),則不能夠向網站添加密碼恢複功能。 |
添加密碼恢複
在“方案總管”中,右擊網站的名稱,單擊“添加新項”,再添加一個名為 RecoverPassword.aspx 的新“Web Form”。
注意 |
請確保在網站的根目錄中建立該頁,而不是在“MemberPages”檔案夾中。 |
在 RecoverPassword.aspx 頁上,切換到“設計”視圖並鍵入靜態文本(如“將密碼重設為新值”)。在“格式”工具列中,使用“塊格式”下拉式清單將該文本的格式設定為標題 1。
從“工具箱”的“登入”組中,將 控制項拖動到頁面上。
從“工具箱”的“標準”組中,將 HyperLink 控制項拖動到頁面上。在 HyperLink 控制項的“屬性”視窗中,將 Text 屬性設定為 Home,並將 NavigateUrl 屬性設定為 ~/Default.aspx。
切換到 Default.aspx 頁。
右擊 LoginView 控制項,然後單擊“顯示智能標記”。在“LoginView 任務”菜單的“視圖”列表中,單擊“AnonymousTemplate”。
這將把 LoginView 控制項切換到向未登入使用者顯示的內容的編輯模式。
從“工具箱”的“標準”組中,將 HyperLink 控制項拖動到模板上。在 HyperLink 控制項的“屬性”視窗中,將 Text 屬性設定為 Forgot your password?,將 NavigateUrl 屬性設定為 ~/RecoverPassword.aspx。
現在可以測試密碼恢複。
測試密碼恢複
按 Ctrl+F5 以運行網站。
預設情況下為未登入使用者,因此看見 LoginView 控制項的匿名模板。
單擊“是否忘記了您的密碼?”連結。
出現 RecoverPassword.aspx 頁。
鍵入使用者名稱並單擊“提交”。
顯示安全提示問題並提示您鍵入安全答案。
鍵入安全答案並單擊“提交”。
如果輸入正確的答案,則網站將重設密碼並給您發送附有新密碼的電子郵件。
後續步驟
本演練闡釋了一個簡單但是完整的建立應用程式的方案,該方案提示使用者輸入憑據、向登入使用者顯示資訊、使使用者可以恢複忘記的密碼和限制對頁面的訪問。可以使用本演練中闡釋的技術和控制項建立更複雜的頁面和應用程式。例如,您可能希望:
建立其他使用者和定義角色(組)(如“managers”、“sales”或“members”),並將使用者指派到不同角色。有關詳細資料,請參見演練:通過角色管理網站使用者。
將成員資格提供者從預設的 Access 提供者更改為 SQL 提供者。將成員資格資訊儲存在 Access 資料庫適用於小型到中型網站,但是如果網站的流量將比較大,則要將 Microsoft SQL Server 用作成員資格儲存區。有關更多資訊,請參見和。
更改登入控制項的外觀。Login、PasswordRecovery 和 CreateUserWizard 控制項均支援模板,這使您可以配置它們包含的文本和按鈕,並更改控制項的顏色、字型和其他外觀特性。有關更多資訊,請參見節中各主題。
建立規則,這些規則不僅限制匿名使用者,而且限制特定使用者或角色訪問頁面或檔案夾。
將成員資格與設定檔屬性群組合,這將使您可以為每個使用者儲存特定於使用者的設定。有關詳細資料,請參見演練:用設定檔屬性維護網站使用者資訊。
將登入控制項與主控頁組合。主控頁使您可以定義頁布局,該頁布局可以用於應用程式中的所有頁面。有關詳細資料,請參見演練:在 Visual Web Developer 中建立和使用 ASP.NET 主版頁面。
添加恢複忘記的密碼的功能。有關更多資訊,請參見。