+ All Categories
Home > Documents > Chapter 13

Chapter 13

Date post: 05-Jan-2016
Category:
Upload: satin
View: 29 times
Download: 4 times
Share this document with a friend
Description:
Chapter 13. 網站安全管理基礎. 本章提要. 13 - 1 ASP.NET 的安全管理機制 13 - 2 使用會員管理機制 13 - 3 登入控制項 13 - 4 會員維護相關控制項 13 - 5 使用者設定檔. 網站安全管理基礎. 不管是基於保護網站資訊、限制使用者可存取的網頁;或僅只是要為網站提供一些個人化的功能 , 都必須為瀏覽網頁的使用者 『 驗明正身 』, 也就是透過安全管理的驗證機制 , 辨明瀏覽網頁者的身份。 本章就來介紹 ASP.NET 2.0 的安全驗證機制 , 及如何在網頁上實作驗證功能。. - PowerPoint PPT Presentation
164
著著著著著 © 著著著著著著著著著著 Chapter 13 網網網網網網網網
Transcript
Page 1: Chapter 13

著作權所有 © 旗標出版股份有限公司

Chapter 13

網站安全管理基礎

Page 2: Chapter 13

2

本章提要 13 - 1 ASP.NET 的安全管理機制 13 - 2 使用會員管理機制 13 - 3 登入控制項 13 - 4 會員維護相關控制項 13 - 5 使用者設定檔

Page 3: Chapter 13

3

網站安全管理基礎 不管是基於保護網站資訊、限制使用者可

存取的網頁;或僅只是要為網站提供一些個人化的功能 , 都必須為瀏覽網頁的使用者『驗明正身』 , 也就是透過安全管理的驗證機制 , 辨明瀏覽網頁者的身份。

本章就來介紹 ASP.NET 2.0 的安全驗證機制 , 及如何在網頁上實作驗證功能。

Page 4: Chapter 13

4

13 - 1 ASP.NET 的安全管理機制 ASP.NET 的安全管理可分為驗證與授權兩

個層次: 驗證 (Authentication) :簡單的說 , 驗證就

是查核使用者身份的動作 , 例如常見的 Web-Mail 應用 , 當我們要連上自己的網路信箱時 , 要輸入使用者名稱和密碼 , 通過驗證後才能讀信、寫信。

Page 5: Chapter 13

5

ASP.NET 的安全管理機制 授權 (Authorization) :授權則是指通過驗證

的使用者 , 對於網站中各項資源有何存取權限。

例如網路論壇的管理者 , 即被授權可以管理論壇的會員帳號、編輯和刪除所有文章等;而一般的註冊會員 , 則只能發表新文章 , 或是編輯自己發表的文章。

Page 6: Chapter 13

6

ASP.NET 的安全管理機制 ASP.NET 即是透過驗證和授權來做網頁的

安全管理 , 例如系統管理員可設定:使用者通過驗證後才能存取網頁、而權限不同的使用者 , 則可執行不同的功能或是瀏覽不同的網頁等等。

驗證和授權的基本設定都是放在 Web.Config 之中 , 以下就來介紹 Web.Config 中相關標籤的用法。

Page 7: Chapter 13

7

IIS 伺服器的安全管理 ASP.NET 動態網頁需放在 IIS 伺服器上

執行 , 當使用者要瀏覽一個 ASP.NET 網頁時 , 當然是先向伺服器提出要求。

因此不管這個 ASP.NET 網頁有沒有使用本章介紹的安全控管機制 , 在提出要求時 , 就會先進入如下的安全驗證程序 , 通過後 IIS 才會進一步執行 ASP.NET 網頁:

Page 8: Chapter 13

8

IIS 伺服器的安全管理 1. 提出要求的 IP 位址是在允許存取網站之

列。 2. 使用者需通過 Windows 安全驗證;不

過 IIS 預設允許匿名存取 , 且會以網站設定的帳號登入。

3. ASP.NET 網頁所在的網站或資料夾有開放可『執行』網頁的權限。

4. ASP.NET 網頁若是存於 NTFS 資料夾 , 則登入的身份需擁有該 .aspx 檔的存取權限。

Page 9: Chapter 13

9

IIS

伺服器的安全管理

Page 10: Chapter 13

10

IIS 伺服器的安全管理 通過上述安全檢查後 , 該 ASP.NET 網頁

才會被執行 , 並進一步傳回執行結果 , 或是再進入 ASP.NET 的安全檢查程序。

關於 IIS 安全設定的詳細資訊 , 可參見 IIS 線上說明;本書附錄則會介紹如何在 Windows XP 安裝 IIS 伺服器。

Page 11: Chapter 13

11

Web.Config 的驗證設定 ASP.NET 支援的驗證方式有下列 3 種:

Windows 驗證:使用 Windows 的網域或本機帳戶進行驗證。使用此法時 , 就是直接承襲 IIS 的 Windows 驗證結果 , 因此網頁不需再自行做驗證。

Forms 驗證:在網頁中詢問使用者名稱及密碼進行驗證。本書以下都將此種驗證稱為表單驗證。

Page 12: Chapter 13

12

Web.Config 的驗證設定 Passport 驗證:使用微軟的 .NET Passpor

t ( 現更名為 Windows Live!) 系統進行驗證 , 需另外安裝 Passport SDK 才能使用 , 因此本書將不介紹。

如上所列 , 使用 Windows 驗證時 , ASP.NET 並不需進行『驗證』的動作;而使用 Passport 驗證又需額外的開發套件才能使用 , 因此本章就將重點放在表單驗證。

Page 13: Chapter 13

13

Web.Config 的驗證設定 要使用表單驗證 , 可在 Web.config 的 <s

ystem.web> 標籤下使用 <authentication> 標籤設定:

Page 14: Chapter 13

14

Web.Config 的驗證設定 啟用表單驗證後 , 可在 <authentication>

標籤下加上 <forms> 標籤設定驗證相關參數 , 但在進一步說明這些設定前 , 我們先認識一下表單驗證的運作方式。

網站使用表單驗證時 , 當有瀏覽器提出瀏覽 ASP.NET 網頁的要求 , 即進入 ASP.NET 的安全管理程序:

Page 15: Chapter 13

15

Web.Config 的驗證設定 1. ASP.NET 的驗證模組會檢查瀏覽者是否持有驗證使用者身份的 Ticket, 若無則進入網站所設定的登入網頁 , 要求瀏覽者進行驗證。

2. 瀏覽者通過驗證後 , 系統會產生記錄登入資訊的 Ticket, 此 Ticket 可存於 Cookie 或以 URL 查詢字串的形式存在。

Page 16: Chapter 13

16

Web.Config 的驗證設定 3. 之後瀏覽者繼續瀏覽網站中的任何網頁時 ,

ASP.NET 即可由 Ticket 取得使用者身份 , 並檢查該身份是否有足夠授權存取網頁 , 有授權即允許存取網頁。

至於代表驗證通過的 Ticket 是用 Cookie 或其它方式儲存、 Cookie 的效期為何 , 這些都可在 <forms> 標籤中用下列屬性來設定:

Page 17: Chapter 13

17

Web.Config 的驗證設定 cookieless :設定 Ticket 的存放方式 , 可

為下列值: UseCookies :以 Cookie 存放驗證的 Ticke

t 。 UseUri :不使用 Cookie, Ticket 會以編碼過

的方式呈現在 URL 中。 AutoDetect :自動偵測 , 若瀏覽端支援 Coo

kie 時就會選用 Cookie 。 UseDeviceProfile :此為預設值 , 表示依 m

achine.config 中的設定 , 依裝置類型決定是否使用 Cookie 。

Page 18: Chapter 13

18

Web.Config 的驗證設定 name :指定 cookie 的名稱 , 預設值為 ".

ASPXAUTH" 。 path :指定 cookie 的路徑名稱 , 預設值為

"\", 也就是根目錄。 timeout :指定 cookie 的有效時間 ( 分鐘 ),

預設值為 30 。

Page 19: Chapter 13

19

Web.Config 的驗證設定 slidingExpiration :設定 cookie 有效時間 ,

是否要隨使用者重新上線而自動延長。預設值為 "False", 亦即不延長;若設為 "True", 則在 cookie 的有效時間快到期前 , 使用者又重新連上網站 , cookie 的有效時間會自動改為從這一次登入的時間開始計算。

Page 20: Chapter 13

20

Web.Config 的驗證設定 protection :指定 Ticket 是否加密及查驗

(validation), 可設為: All :要加密及查驗。 None :都不要。 Encryption :只做加密。 Validation :只做查驗。

Page 21: Chapter 13

21

Web.Config 的驗證設定 loginUrl :當瀏覽者尚未通過驗證時 , 會導

向至此屬性所指定的驗證網頁。預設值為 "login.aspx" 。

defaultUrl :當瀏覽者過驗證通過後 , 會導向至此屬性所指網頁。預設值為 "Default.aspx" 。

Page 22: Chapter 13

22

Web.Config 的驗證設定 例如以下的片段是設定驗證通過後 , 導向到 "memberOnly.aspx" 網頁 , 且驗證通過後 , cookie 會保留 1 天:

Page 23: Chapter 13

23

Web.Config 的授權設定 設好驗證方式後 , 若要再進一步控管使用者可

瀏覽哪些網頁 , 就需加入 <authorization> 標籤設定授權方式。

設定方式是在 <authorization>...<authorization> 內加入 <allow/> 及 <deny/> 標籤 , 指定要授權或拒絕使用者存取網站或做何種操作:

Page 24: Chapter 13

24

Web.Config 的授權設定 <allow/> 及 <deny/> 標籤可使用的屬性如

下: users :要設定授權的使用者名稱 , 若同時

設定多人 , 可用逗號分隔。另外也可用兩個符號: "?" 表示所有匿名 (Anonymous) 使用者; "*" 則表示所有的使用者。

Page 25: Chapter 13

25

Web.Config 的授權設定 roles :除了直接指名使用者 , 也可用此屬性指定授權對象的『角色』 , 角色 (role) 的用途類似於 Windows 中的群組帳戶 , 我們可將一組使用者設為相同的角色 , 再設定此角色的授權 , 如此一來就等於設定這一組使用者的授權。

關於如何建立角色 , 會在下一節設定。

Page 26: Chapter 13

26

Web.Config 的授權設定 verbs :設定對 HTTP 通訊協定動作的授權 ,

可設定的值包括 GET 、 HEAD 、 POST 、DEBUG, 若要同時列出多個值則要用逗號分隔;預設值為 "*", 表示全部項目。

以下片段就是拒絕所有匿名使用者存取任何網頁的授權設定:

Page 27: Chapter 13

27

表單驗證的基礎 在 ASP.NET 中 , 共有兩套實作表單驗證

的方式 , 其中之一為早期 ASP.NET 即提供 , 使用 FormAuthentication 類別進行驗證的方式;另一個則是 ASP.NET 2.0 新增的會員管理機制。

本節先介紹前者 , 13-2 節再介紹會員機制。

Page 28: Chapter 13

28

表單驗證的基礎 建構使用 FormAuthentication 類別驗證的

系統 , 除了前述修改 Web.Config 的設定外 , 還必須: 建立使用者帳號及密碼。 在網頁中用 FormAuthentication 類別的靜

態 (static) 方法進行驗證相關操作。

Page 29: Chapter 13

29

建立使用者帳號及密碼 使用表單驗證時 , 如果要用 FormAuthenti

cation 類別提供的方法進行驗證 , 則需將帳號及密碼記錄在 Web.config 之中。

若想將帳號 / 密碼存於資料庫或文字檔 , 則進行驗證時 , 就必須自行用程式讀出帳號 / 密碼 , 並與瀏覽者輸入的帳號 / 密碼進行比對。

Page 30: Chapter 13

30

建立使用者帳號及密碼 要將帳號及密碼存放在 Web.config 之中 ,

需在 <forms> 標籤內加入 <credentials> 標籤 , 然後在 <credentials> 標籤中可用 <user/> 標籤建立帳號及密碼 , 格式如下:

Page 31: Chapter 13

31

建立使用者帳號及密碼 <credentials> 的 passwordFormat 屬性 ,

是用來設定 <user/> 標籤中密碼字串的格式。若 passwordFormat 屬性設為 "Clear" 表示 password 屬性的字串就是密碼字串:

若覺得將密碼字串直接存於 Web.config 中安全性太低 , 則可改存編碼後的字串。

帳號

Page 32: Chapter 13

32

建立使用者帳號及密碼 此時可將 <credentials> 的 passwordFor

mat 屬性設為 “MD5” 或 “ SHA1”, 表示 Web.config 中記錄的是以 MD5 (Message Digest 5) 或 SHA1 (Secure Hash Algorithm) 雜湊演算法編碼過後的字串。

例如密碼 “ 123” 經過 MD5 編碼後的字串是 "202CB962AC59075B964B07152D234B70", 此時 <user/> 標籤內就需寫成:

Page 33: Chapter 13

33

建立使用者帳號及密碼

如何產生編碼過的密碼字串 , 請參見後面方框的說明 , 在本節的範例仍使用未編碼的密碼做示範。

所以我們就先在網站的 Web.config 中 , 找到 <authentication> 標籤 , 將它修改成如下的內容 , 並加上拒絕匿名使用者存取的設定:

Page 34: Chapter 13

34

建立使用者帳號及密碼

Page 35: Chapter 13

35

建立使用者帳號及密碼 以上我們設定了使用表單驗證 , 並將預設

登入網頁設為 Ch13-01.aspx (稍後建立 ), 同時建立一組帳號 / 密碼: ken / 123 。

另外我們也將網站設為拒絕匿名使用者存取 , 所以一定要登入才能存取網頁 , 以下就來看如何在網頁中驗證使用者。

Page 36: Chapter 13

36

產生編碼的密碼字串 要用程式產生編碼過後的密碼字中 , 可使用 F

ormsAuthentication 類別的靜態方法 HashPasswordForStoringInConfigFile(), 以密碼字串及演算法名稱 (“MD5” 或 “ SHA1”) 為參數呼叫此方法 , 即會傳回編碼過的字串內容 , 例如:

則最後 md5pass 的值就是 "123" 經過 MD5 演算法編碼後的字串。

Page 37: Chapter 13

37

在網頁中進行驗證 剛剛在 Web.Config 中設定了預設的登入

網頁為 Ch13-01.aspx, 因此我們就來設計這個登入網頁 , 網頁中使用兩個 TextBox 以供輸入帳號及密碼 , 再加上一個登入按鈕:

Page 38: Chapter 13

38

在網頁中進行驗證

Page 39: Chapter 13

39

在網頁中進行驗證 在登入按鈕的事件處理程序中 , 要做的就

是驗證瀏覽者所輸入的帳號及密碼是否與 Web.config 中設定的相同 , 此動作可用 FormsAuthentication 的 Authenticate() 方法進行 , 呼叫時的參數就是帳號及密碼 , 驗證通過則傳回 True 。

所以按鈕的處理程序可寫成:

Page 40: Chapter 13

40

在網頁中進行驗證

Page 41: Chapter 13

41

在網頁中進行驗證 第 9 行呼叫的 RedirectFromLoginPage()

會在驗證成功時 , 將登入者導向到指定的網頁:若使用者是從網站中其它網頁導向進來 , 此方法會讓使用者回到該網頁;否則就是自動連上 <forms> 標籤 defaultUrl 屬性所指的網頁 ( 預設為 Default.aspx) 。

RedirectFromLoginPage() 的第 1 個參數為帳號名稱 , 如此可讓轉向過去的網頁取得使用者資訊 , 第 2 個參數則是設定是否要將登入資訊存於 Cookie 中。

Page 42: Chapter 13

42

在網頁中進行驗證 如果要由程式指定轉向的網頁 , 可加上網頁

名稱 ( 相對路徑 ) 字串當成第 3 個參數。 第 11 行則會在 Authentication() 方法傳回

False 時顯示『登入失敗』的訊息。 為了測試導向功能 , 我們再設計一個 Ch1

3-02.aspx, 此網頁只有一段歡迎訊息及一個 Literal 控制項。

Page 43: Chapter 13

43

在網頁中進行驗證 我們讓網頁載入時 , 就會將登入的使用者

名稱顯示在 Literal 控制項中 , 使用者名稱的取得方式 , 是使用 Page 的 User 物件 , 並透過其 Identity.Name 屬性取得:

Page 44: Chapter 13

44

在網頁中進行驗證 將兩個檔案都存檔後 , 請先用瀏覽器開啟

Ch13-02.aspx, 此時因尚未通過驗證 , 因此會自動導到 Ch13-01.aspx 網頁:

Page 45: Chapter 13

45

在網頁中進行驗證

以上就是一個簡單的表單驗證範例 , 由建立的過程中可發現 , 此種設計方式並不適用於使用者較多的網站:

Page 46: Chapter 13

46

在網頁中進行驗證 要將帳號 / 密碼一一加到 Web.config 中非

常不便 , 如果要將密碼字串編碼 , 還需另行處理。

Web.config 的帳號並不支援群組帳號 / 角色這類功能 , 因此網站中如要對多人做不同的授權 , 設定工作也很鎖碎。

若要將帳號 / 密碼存於資料庫或其它位置 , 則需自行撰寫讀取及比對帳號 / 密碼的驗證程式。

Page 47: Chapter 13

47

在網頁中進行驗證 因此在 ASP.NET 2.0 增加了一套功能完整

的會員 (Membership) 與角色 (Role) 管理機制 , 並提供相對應的控制項 , 讓登入帳號的建立與管理、權限管理、網頁的設計都更加方便。

本章後續內容就以建立會員系統及相關控制項的使用為例來說明

Page 48: Chapter 13

48

13 - 2 使用會員管理機制 ASP.NET 2.0 的會員管理是建構於表單驗

證系統上的新功能 , 其特色包括: 所有使用者的登入資料 ( 會員資料 ) 都存於

SQL Server 2005 Express 資料庫中。 提供角色管理 , 將多位會員設為同一角色 ,

再透過角色設定存取權限 , 就不需一一設定個別會員的授權。

提供管理介面管理會員與角色。 提供登入及基本會員新增、維護功能的控

制項 , 方便網頁開發。

Page 49: Chapter 13

49

使用會員管理機制 會員與角色資料庫是以資料庫檔案的形式 ,

存於網站的 App_Data 資料夾下。換言之 , 網頁執行時 , 會以使用者執行個體的方式執行 SQL Server 2005 Express, 並附加此會員資料庫以便存取。

如果想使用其它的資料來源 , 必須另行設定及撰寫程式 , 詳細資訊請參見 MSDN 網站上的說明。

Page 50: Chapter 13

50

建立會員及會員資料庫 雖然資料是存於 SQL Server 2005 Expres

s 資料庫 , 但我們不必自行建立、管理資料庫 , 所有的會員管理動作 , 都可透過 ASP.NET 應用程式管理員進行。

只要逕行建立第一個會員 , ASP.NET 應用程式管理員就會替我們建立必要的資料庫及資料表。請在 VWD 中執行『網站 / ASP.NET 組態』命令 , 並依如下步驟建立第 1 個會員:

Page 51: Chapter 13

51

建立會員及會員資料庫

Page 52: Chapter 13

52

建立會員及會員資料庫

Page 53: Chapter 13

53

建立會員及會員資料庫

Page 54: Chapter 13

54

建立會員及會員資料庫

Page 55: Chapter 13

55

建立會員及會員資料庫

Page 56: Chapter 13

56

建立會員及會員資料庫 建好會員之後 , 由 VWD 的方案總管窗格檢視 App_Data 資料夾 , 即可看到已建好一個 ASPNETDB.MDF 資料庫。

如果您想瞭解資料庫中有哪些資料表 , 可在資料庫總管窗格中檢視 , 但請不要自行更動資料庫內容 , 以免造成會員系統損毀。

Page 57: Chapter 13

57

建立會員及會員資料庫

為方便後續測試 , 我們再建立一位會員 , 請再進入建立會員的網頁:

Page 58: Chapter 13

58

建立會員及會員資料庫

Page 59: Chapter 13

59

帳號及密碼相關設定 在建立帳號及密碼的過程中 , 讀者或許覺得密碼強制至少 7 個字元、至少含 1 特殊符號、一定要輸入問題等限制 , 對使用者並不友善。

如果想放寬限制 , 可到 machine.config 中設定。

在 machine.config 中的 <membership> 標籤下 , 即有會員資料提供者的相關參數 , 其中也包括帳號、密碼限制的設定:

Page 60: Chapter 13

60

帳號及密碼相關設定

Page 61: Chapter 13

61

帳號及密碼相關設定 以下說明其中幾個重要的屬性:

EnablePasswordReset :是否允許使用者重設密碼 , 在 13-4 節會介紹重設密碼的方式。

EnablePasswordRetrieval :是否允許使用 MembershipProvider 類別的 GetPassword() 方法 , 由資料庫中取得使用者密碼;但如果以下的 PasswordFormat 屬性為 "Hashed", 則密碼是無法被取得的 ( 因雜湊演算法是單向演算法 , 無法由雜湊值推算回原本的密碼為何 ) 。

Page 62: Chapter 13

62

帳號及密碼相關設定 MinRequiredNonAlphanumericCharacters :

指定密碼中至少要含幾個文數字以外的特殊符號字元 , 若要讓會員不必費心想出奇怪的密碼 , 可將此屬性值設為 0 。

MinRequiredPasswordLength :設定密碼最短長度 , 若要容許較短的密碼 , 就將此屬性設為較小的數值。

Page 63: Chapter 13

63

帳號及密碼相關設定 PasswordFormat :指定密碼儲存在資料表

中的格式 , 可使用的值包括 "Clear" ( 明碼 ) 、 "Encrypted" ( 加密 ) 、 "Hashed" ( 以雜湊演算法編碼 ) 三種。

RequiresQuestionAndAnswer :是否一定要用問 / 答的資料 , 才能重新取得密碼。

RequiresUniqueEmail :是否強制會員都要用不同的電子郵件地址註冊 , 例如設為 "true" 即表示同一個電子郵件不能重複註冊。

Page 64: Chapter 13

64

建立與設定角色 在一般的網路作業系統中 , 為方便管理 ,

都會用『群組』來管理使用者的存取權限。 例如設定 Administrators 群組可執行任何

程式 , 則所有屬於此群組的使用者 , 都具有執行任何程式的權限。

而為了方便管理會員的授權 , 我們也可透過角色來設定網站的權限 , 讓屬於同一角色的會員 , 都能具有相同的授權。

Page 65: Chapter 13

65

建立與設定角色 初次建立會員與會員資料庫時 , 預設不會

啟用角色功能 , 因此我們要先啟用才能建立角色 , 請在 ASP.NET 應用程式管理員的安全性頁面做如下設定:

Page 66: Chapter 13

66

建立與設定角色

Page 67: Chapter 13

67

建立與設定角色

Page 68: Chapter 13

68

建立與設定角色

Page 69: Chapter 13

69

建立與設定角色

Page 70: Chapter 13

70

建立與設定角色 要將既有的會員加入角色中 , 可依如下方式進

行:

Page 71: Chapter 13

71

建立與設定角色

Page 72: Chapter 13

72

建立與設定角色

Page 73: Chapter 13

73

建立與設定角色 此外 , 在啟 用角色功能 後 , 建立使 用者時 , 即 可勾選要讓 新使用者隸 屬的角色:

Page 74: Chapter 13

74

設定權限 建好會員及角色後 , 就可開始設定網站的

存取權限。 為方便測試 , 我們先在網站中加入一個子

資料夾:

Page 75: Chapter 13

75

設定權限 我們要讓這個子資料夾只供屬於 Admin 角色的會員進入 , 所以必需設定禁止一般會員存取 , 但 Admin 可存取。

請再執行『網站 / ASP.NET 組態』命令 , 進入安全性頁面進行如下設定:

Page 76: Chapter 13

76

設定權限

Page 77: Chapter 13

77

設定權限

Page 78: Chapter 13

78

設定權限

Page 79: Chapter 13

79

設定權限

Page 80: Chapter 13

80

設定權限

Page 81: Chapter 13

81

設定權限

Page 82: Chapter 13

82

設定權限

Page 83: Chapter 13

83

設定權限 但網頁上方的說明文字提到:當有多個規

則時 , 位於較上方的規則設定 , 將會蓋住較下方的規則。

而在我們的例子中 , 雖然設定了允許 Admin 角色存取 Admin 資料夾 , 但此規則因位於第 2 個位置 , 會被『拒絕所有會員存取』的規則蓋過去 , 所以要將這 2 個規則的位置對調一下:

Page 84: Chapter 13

84

設定權限

Page 85: Chapter 13

85

設定權限

Page 86: Chapter 13

86

設定權限

Page 87: Chapter 13

87

設定權限 建好會員帳號及相關授權設定後 , 我們就

可設計網頁來測試會員與角色的功能。 不過我們並不需像前面表單驗證一樣 , 自

行設計登入的畫面與驗證程式 , 這些都已有現成的控制項可使用 , 以下就來介紹搭配會員機制使用的登入控制項。

Page 88: Chapter 13

88

13 - 3 登入控制項 為簡化設計會員登入功能 , ASP.NET 2.0 特別提供了一組與會員登入相關的控制項 , 這些控制項本身即會存取會員資料庫的資訊 , 也提供驗證、維護等相關功能 , 讓我們能在不必撰寫程式碼的情況下 , 即可實做出功能完整的登入網頁。

Page 89: Chapter 13

89

Login 、 LoginName 、 LoginStatus 控制項 首先來介紹 Login 和 LoginName 這兩個

控制項 , 前者的用途就是提供類似範例 Ch13-01.aspx 的輸入帳號 / 密碼及登入按鈕的登入功能;後者則是單純顯示登入使用者的名稱。

以下就來設計兩個網頁示範其功能 , 請先建立新網頁 Ch13-03.aspx, 並在設計模式下 , 將 Login 控制項拉曳到網頁中:

Page 90: Chapter 13

90

Login 、 LoginName 、 LoginStatus 控制項

Page 91: Chapter 13

91

Login 、 LoginName 、 LoginStatus 控制項

Page 92: Chapter 13

92

Login 、 LoginName 、 LoginStatus 控制項 如此就算完成一個可以運作的登入網頁了。 但我們還可做一些額外的設定 , 例如 Desti

nationPageUrl 屬性可設定在登入成功後 , 自動導向到指定的網頁:

Page 93: Chapter 13

93

Login 、 LoginName 、 LoginStatus 控制項

Page 94: Chapter 13

94

Login 、 LoginName 、 LoginStatus 控制項 上圖的設定是讓使用者登入成功後 , 自動導向到 Ch13-04.aspx, 所以我們現在要用 LoginName 和 LoginStatus 控制項建立這個登入後的歡迎網頁:

Page 95: Chapter 13

95

Login 、 LoginName 、 LoginStatus 控制項

Page 96: Chapter 13

96

Login 、 LoginName 、 LoginStatus 控制項 LoginName 控制項的功能很簡單 , 就是顯示目前登入的帳號名稱 , 不過我們可在 FormatString 屬性中加入其它要顯示的文字 ( 例如歡迎訊息 ) :

Page 97: Chapter 13

97

Login 、 LoginName 、 LoginStatus 控制項

Page 98: Chapter 13

98

Login 、 LoginName 、 LoginStatus 控制項 LoginStatus 則會依使用者是否登入 , 顯示

不同的內容:預設在有使用者登入時 , 顯示登出的超連結;使用者未登入時則顯示登入的超連結。

最後我們在 Admin 資料夾中再放入一個類似的網頁 Ch13-05.aspx, 以便測試前一節對 Admin 資料夾做的授權設定:

Page 99: Chapter 13

99

Login 、 LoginName 、 LoginStatus 控制項

Page 100: Chapter 13

100

Login 、 LoginName 、 LoginStatus 控制項 為測試此處及後續的範例 , 我們將 Web.confi

g 中 <forms> 標籤所設的登入網頁改成指向 Ch13-03.aspx, 同時也將拒絕匿名使用者連線的授權設定標示為註解 ( 或直接刪除之 ) :

Page 101: Chapter 13

101

Login 、 LoginName 、 LoginStatus 控制項 存檔後 , 用瀏覽器開啟 Ch13-03.aspx 即

會看到如下的登入畫面:

Page 102: Chapter 13

102

Login 、 LoginName 、 LoginStatus 控制項

Page 103: Chapter 13

103

Login 、 LoginName 、 LoginStatus 控制項

Page 104: Chapter 13

104

Login 、 LoginName 、 LoginStatus 控制項

Page 105: Chapter 13

105

Login 、 LoginName 、 LoginStatus 控制項 如上的範例 , 我們只需在會員資料庫設好

各會員所屬的角色、各角色的權限 , ASP.NET 就會自行替我們做相關的安全控管 , 不需我們自行撰寫相關檢查程式。

如果想自行用程式檢查使用者角色 , 可呼叫 Roles 類別的下列 2 個方法:

Page 106: Chapter 13

106

使用 LoginView 控制項 在上一個例子中 , 由於我們已將 Web.confi

g 中拒絕匿名使用者的授權設定去掉 , 所以匿名使用者可直接連上網站時 , 若他們連上 Ch13-04.aspx 時 , 則會看到如下的畫面:

Page 107: Chapter 13

107

使用 LoginView 控制項 由於使用者未登入 , 所以 LoginName 控

制項無法取得登入帳號名稱 , 因此未顯示任何內容。

我們雖可修改網頁 , 用程式判斷使用者是否已登入 , 再顯示合適的訊息及內容 , 但其實有個更方便的作法 , 就是改用 LoginView 控制項。

Page 108: Chapter 13

108

使用 LoginView 控制項 LoginView 也是以 Template 構成的控制

項 , 同樣分為未登入及已登入的 Template, 我們只要分別設計好兩個 Template 的內容 , 網頁被瀏覽時 , 控制項就會自動判斷使用者是否已登入 , 並據以顯示合適的 Template 。

以下就先建立一個空白網頁 (Ch13-06.aspx), 並將 LoginView 控制項加到網頁中:

Page 109: Chapter 13

109

使用 LoginView 控制項

Page 110: Chapter 13

110

使用 LoginView 控制項

Page 111: Chapter 13

111

使用 LoginView 控制項

Page 112: Chapter 13

112

使用 LoginView 控制項

Page 113: Chapter 13

113

使用 LoginView 控制項 網站已上線的會員人數資訊 , 可透過 Mem

bership 類別的 GetNumberOfUsersOnline() 方法取得 , 因此可在 Page_Load 事件中做如下處理即可在網頁中顯示已上線的會員人數:

Page 114: Chapter 13

114

使用 LoginView 控制項 存檔後瀏覽網頁即可看到如下效果:

Page 115: Chapter 13

115

使用 LoginView 控制項

Page 116: Chapter 13

116

使用 LoginView 控制項

Page 117: Chapter 13

117

使用 LoginView 控制項 在上圖可看到 , 雖然我們已經登出 , 但仍

被 ASP.NET 視為在線上 , 這是因為對伺服器端動態網頁程式而言 , 當網頁已傳送給瀏覽器 , 連線就結束了 , 在伺服器端根本無從判斷對方是否仍在線上 ( 使用者可能仍在閱讀網頁 , 也可能已關閉瀏覽器視窗 ) 。

因此 GetNumberOfUsersOnline() 方法其實只是根據會員資料庫中所記錄的最近一次登入時間 , 是否超過 15 分鐘 , 來計算上線會員數:

Page 118: Chapter 13

118

使用 LoginView 控制項 若會員上次登入時間距今未超過 15 分鐘 ,

則視為仍在線上。 若會員上次登入時間距今已超過 15 分鐘 ,

則視為仍在線上。 如果覺得 15 分鐘的時間太長 , 對上線人

數有灌水之嫌 , 則可在 Web.config 中加入 <membership> 標籤 , 以 userIsOnlineTimeWindow 屬性來設定較短的時間 ( 單位為分鐘 ) :

Page 119: Chapter 13

119

使用 LoginView 控制項

與登入狀態相關的控制項就介紹到此 , 下一節繼續介紹搭配會員機制的維護用控制項。

Page 120: Chapter 13

120

13 - 4 會員維護相關控制項 如果要讓管理員自行在 ASP.NET 應用程

式管理員中建立所有會員帳號不僅不方便 , 也使網站運作相當沒有彈性。

因此 ASP.NET 2.0 特別提供 3 個繼承自 Wizard 控制項而產生的維護用途控制項:

Page 121: Chapter 13

121

會員維護相關控制項 CreateUserWizard 控制項:可供線上註冊。

ChangePassword 控制項:可供使用者修改密碼。

PasswordRecovery 控制項:可在使用者忘記密碼時 , 供使用者取得或重設密碼。

Page 122: Chapter 13

122

CreateUserWizard CreateUserWizard 如其名稱 , 是建立會員

帳號的控制項 , 而最常見的用途即是放在網站提供線上即時註冊的功能 , 如此就不需由管理員預先建立帳號 , 任一位造訪網站的人 , 都能選擇立即註冊建立新帳號。

此控制項也是拉曳到網頁中即可使用:

Page 123: Chapter 13

123

CreateUserWizard

Page 124: Chapter 13

124

CreateUserWizard 其實前面使用 ASP.NET 應用程式管理員建立會員帳號時的畫面 , 就是使用 CreateUserWizard 控制項建立的。

但此控制項原本有兩個步驟: 第 1 個就是上圖看到的會員資料輸入畫面內容

下一步則是註冊成功的訊息:

Page 125: Chapter 13

125

CreateUserWizard

Page 126: Chapter 13

126

CreateUserWizard 在屬性窗格中除了可修改、自訂控制項中

各部份的文字外 , 也可透過以下幾個屬性改變其行為: AutoGeneratePassword :若設為 "true",

則控制項中不會出現密碼欄位 , 密碼是由控制項自動產生。

ContinueDestinationPageUrl :設定在註冊成功的畫面中 , 繼續鈕所代表的網頁連結 ( 例如網站首頁 ), 在本範例中 , 我們將之設為 "~/Ch13-06.aspx" 。

Page 127: Chapter 13

127

CreateUserWizard LoginCreatedUser :是否在建立成功後 ,

就自動以新帳號驗證、登入 , 預設為 "true" 。 RequireEmail :設定是否顯示電子郵件欄位。

由於 CreateUserWizard 控制項類別是繼承 Wizard 控制項所產生的 , 因此具備和 Wizard 控制項相同的特性。

Page 128: Chapter 13

128

CreateUserWizard 此外當您在設計頁面中設計完成時 , 要記得將頁面選回第 1 步驟 , ActiveStepIndex 屬性才會自動回復為 0, 否則將會使得瀏覽網頁時 , 一開始即進入後面的步驟。

設定完成並存檔後 , 瀏覽網頁時即可在線上註冊新帳號:

Page 129: Chapter 13

129

CreateUserWizard

Page 130: Chapter 13

130

CreateUserWizard

Page 131: Chapter 13

131

CreateUserWizard CreateUserWizard 控制項和 Wizard 控制

項一樣可以隨意加入新的步驟 , 設定方式與 Wizard 控制項類似 , 請參見第 5 章。

Page 132: Chapter 13

132

ChangePassword 控制項 有些使用者在註冊後會想要改變密碼 , 此

時可利用 ChangePassword 控制項在網頁上提供相關功能 , 此控制項也是拉曳到網頁中即可使用:

Page 133: Chapter 13

133

ChangePassword 控制項

Page 134: Chapter 13

134

ChangePassword 控制項 ChangePassword 控制項的使用技巧、注意事項和 CreateUserWizard 控制項差不多。

此外還可透過下列 2 個屬性 , 設定使用者操作時的行為: CancelDestinationPageUrl :設定使用者按

取消鈕時要進入哪一個網頁。 ContinuedDestinationPageUrl :設定變更成功按繼續鈕要導向到哪一個網頁。

Page 135: Chapter 13

135

ChangePassword 控制項 本範例仍是將這兩個屬性都設為 "~/Ch13-

06.aspx" 。 在預設情況下 , 使用者必須登入後才能變

更密碼 , 不過 ChangePassword 控制項還提供一種變通的方式:只要將 DisplayUserName 屬性設為 "true", 則控制項中會多出一個使用者名稱欄位 , 可供未登入的使用者輸入其帳號名稱:

Page 136: Chapter 13

136

ChangePassword 控制項

Page 137: Chapter 13

137

ChangePassword 控制項 如果使用者已登入 , 則使用者名稱欄會自

動填入目前登入的名稱。 存檔後瀏覽網頁就可測試其效果:

Page 138: Chapter 13

138

ChangePassword 控制項

Page 139: Chapter 13

139

PasswordRecovery 控制項 幾乎每個人都有忘記密碼的經驗 , 如果網

站會員忘記密碼 , 則可用 PasswordRecovery 控制項來重設密碼。

網站使用 PasswordRecovery 控制項重設密碼的流程如下: 1. 使用者連上網站要重設密碼。 2. 進入使用 PasswordRecovery 控制項的

網頁 , 輸入使用者名稱。

Page 140: Chapter 13

140

PasswordRecovery 控制項 3. PasswordRecovery 控制項會自動產生一

組新密碼 , 並將新密碼寄到使用者註冊時所輸入的郵件信箱。

由於 PasswordRecovery 控制項是以電子郵件將新密碼寄給使用者 , 所以我們必須先用 ASP.NET 應用程式管理員在 Web.config 做好 SMTP 的設定 ( 設定方式請參見第 10 章 ), PasswordRecovery 控制項才能正常運作。

Page 141: Chapter 13

141

PasswordRecovery 控制項 當您已設妥網站的 SMTP 設定 , 即可在網

頁中使用 PasswordRecovery 控制項 , 並測試其效果:

Page 142: Chapter 13

142

PasswordRecovery 控制項

Page 143: Chapter 13

143

PasswordRecovery 控制項 前面介紹的 2 個控制項預設的步驟都只有

2 個 , 但 PasswordRecovery 控制項則有 3 個 , 分別是:詢問使用者名稱、詢問問題答案、最後的成功訊息 , 您可依需要自訂這些步驟的 Template 或加入新的步驟。

Page 144: Chapter 13

144

PasswordRecovery 控制項 儲存檔案後 , 即可在瀏覽器中測試其效果:

Page 145: Chapter 13

145

PasswordRecovery 控制項

Page 146: Chapter 13

146

PasswordRecovery 控制項 稍候在會員當初註冊時所輸入的郵件信箱

就會收到如下的郵件內容:

Page 147: Chapter 13

147

PasswordRecovery 控制項 附帶說明 , 當您的網站已建立重設密碼的

網頁 , 即可在 Login 控制項中用下列 2 個屬性 , 讓 Login 控制項中出現重設密碼網頁的連結: PasswordRecoveryText :代表『重設密碼

網頁』的連結文字。 PasswordRecoveryUrl :『重設密碼網頁』

的網址 , 例如 "~/Ch13-09.aspx" 。

Page 148: Chapter 13

148

13 - 5 使用者設定檔 許多會員網站都會提供記錄會員設定的功

能 , 像是會員目前所選的佈景主題、是否在會員網頁顯示網站新聞 ... 等等。

這類設定並不適合以 Cookie 存在用戶端 , 因為使用者換一台電腦登入網站 , 網站就讀不到前次設定 , 只能依預設值顯示網頁 , 失去會員設定的效果。

Page 149: Chapter 13

149

使用者設定檔 因此這類資訊必須存放在伺服器端 , 而 AS

P.NET 2.0 更進一步提供使用設定檔 (Profile) 功能 , 讓我們能很方便地在伺服器端儲存會員設定。

Page 150: Chapter 13

150

建立 Profile 項目 ASP.NET 2.0 的設定檔 (Profile) 功能是整合於會員管理機制 , 在建立會員資料庫時 , 也會自動建立用來存放設定資訊的 Profile 資料表。

雖然資料表已建好 , 但我們仍需先在 Web.config 中定義打算要存放的設定檔屬性 , 之後才能用程式儲存、讀取會員的個人設定。

Page 151: Chapter 13

151

建立 Profile 項目 要定義設定值屬性 , 需在 <profile> 標籤下

的 <properties> 標籤下 , 用 <add> 標籤來定義 , 其格式為:

Page 152: Chapter 13

152

建立 Profile 項目 例如我們想用設定檔記錄會員喜好的顏色

及年齡 , 則可用如下的 <add> 標籤設定之:

Page 153: Chapter 13

153

以程式存取 Profile 設定值 只要使用者已登入 , 在網頁程式中即可用

『 Profile. 設定檔屬性名稱』的形式 , 存取目前登入者的設定:

為測試上述設定的效果 , 我們撰寫一個簡單的範例網頁。

Page 154: Chapter 13

154

以程式存取 Profile 設定值 此網頁是由表格分為左右兩邊 , 左邊含一

LoginView 控制項;右邊則是可供會員輸入年齡的 TextBox 控制項、選擇喜好顏色的 RadioButtonList 控制項、以及儲存設定的 Button 控制項:

Page 155: Chapter 13

155

以程式存取 Profile 設定值

Page 156: Chapter 13

156

以程式存取 Profile 設定值 當網頁載入時 , 程式要判斷目前使用者是

否已通過驗證 (已登入 ), 是就立即從資料庫取得其設定資料 , 並反應在網頁中 ( 若使用者尚無設定值 , 則會出現預設值 ) 。

至於儲存設定按鈕的 Click 事件處理程序 , 則只是將新的設定值寫入 Profile 之中:

Page 157: Chapter 13

157

以程式存取 Profile 設定值

Page 158: Chapter 13

158

以程式存取 Profile 設定值

Page 159: Chapter 13

159

以程式存取 Profile 設定值 第 11 、 29 行 , 是透過控制項的 Style.Ite

m 屬性 , 設定 "background-color" (背景顏色 ) 的屬性 , 本例中 , 就是用 Profile.FavoriteColor 的值來設定背景顏色。

第 14 行開始的 Else 區塊 , 則會在使用者尚未登入的情況下 , 將各控制項的 Enabled 屬性設為 False, 也就是讓控制項都不能被操作。

如果將此網頁設定成只有驗證通過的使用者才能存取 , 就不需做這類檢查及設定。

Page 160: Chapter 13

160

以程式存取 Profile 設定值 存檔後瀏覽網頁即可看到如下的效果:

Page 161: Chapter 13

161

以程式存取 Profile 設定值

Page 162: Chapter 13

162

以程式存取 Profile 設定值

Page 163: Chapter 13

163

以程式存取 Profile 設定值

Page 164: Chapter 13

164

以程式存取 Profile 設定值


Recommended