亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Security Tutorials系列文章第一章:Security B

系統 1523 0

本系列鏈接如下:
http://www.asp.net/learn/security/?lang=cs

Security Tutorials系列文章第一章:Security Basics and ASP.NET Support

本文英文原版:
http://www.asp.net/learn/security/tutorial-01-cs.aspx

導言:

論壇、電子商務網站等的一個共同點是什么呢?它們都提供用戶帳戶(user accounts).提供user accounts的站點都必須提供一系列的服務,至少新用戶要能注冊、注冊的用戶要能登陸.網站根據在線的用戶作出這些抉擇:某些頁面或部分只能登陸用戶或一部分用戶才能訪問.某些頁面顯示的內容要根據登陸的用戶而定,比如只對登陸用戶可見等.

本文是本系列的第一篇,在本系列我們將考察這些技術:通過web form來甄別用戶,批準對某個具體頁面或功能的訪問,以及在ASP.NET application里管理用戶帳戶.貫徹該系列我們將考察:

.甄別用戶
.通過ASP.NET的Membership framework來管理用戶帳戶
.創建、更新、刪除用戶帳戶
.對登陸用戶訪問某個頁面、目錄或相關功能進行限制.
.通過ASP.NET的Roles framework將用戶帳戶和角色關聯起來.
.管理用戶角色.
.對角色訪問某個頁面、目錄或相關功能進行限制.
.對ASP.NET的security Web controls進行定制以及擴展.

本系列通過很多的截屏來一步步地演示如何操作.每篇文章都分C#和Visual Basic 兩個版本供下載(這第一篇主要從較高的視角來看待security概念,因此沒有相關的代碼供下載).

本文我們將考察一下比較重要的security概念,以及在ASP.NET里可以使用那些東西執行form驗證,授權,用戶帳戶,角色等.

注意:
在任何跨技術的應用程序里Security都是很重要一個方面.對多方面的知識要求較高.本系列不是指導如何開發安全的web應用程序,相反僅僅專注于forms認證,授權,用戶帳戶和角色.有些與security相關的概念我們將在本系列探討,其它的就沒涉及了.


Authentication, Authorization, User Accounts, 以及Roles

Authentication, authorization, user accounts, 和roles在本系列里使用的很頻繁,因此我花點時間從web security的角度進行解釋說明.在一個客戶端——服務器模式里,比如英特網,很多時候服務器要對發出請求的客戶端進行確認.Authentication就是探明客戶端身份的過程.客戶端成功的通過了服務器確認的話,我們就可以說該客戶端通過鑒別了(authenticated).未經確認的客戶端可以叫做unauthenticated 或 anonymous(匿名).

Secure authentication systems至少要包括如下3方面之一: something you know, something you have,或something you are.絕大多數web應用程序都需要依賴客戶端信息,比如,用戶密碼或個人身份號碼(PIN).這些信息用來對用戶進行確認——比如他的username 和 password——這又涉及到credentials.本系列僅關注forms authentication,這種認證模式需要用戶在一個web頁面表單(web page form)里提供他們的credentials.在以前我們都經歷過這種類型的認證.在任何的電子商務網站,當你打算付賬時,我們都需要在一個頁面里將用戶名和密碼輸入textboxes里再登陸.

除了對客戶端進行確認外,我們還需要對客戶端要訪問的資源和功能進行一些限制.Authorization就是這樣的一個過程:判斷某個用戶是否有訪問某些特定資源或功能的權限.

user account是對某個用戶的信息進行存儲.User accounts最少要包含可以唯一的識別用戶的信息,比如用戶的登錄名以及密碼.除了這些最基本的信息外,user accounts還可能包括:用戶的電子郵件,創建用戶的日期和時間,用戶最后一次登陸的時間,first name和last name,電話號碼,通訊地址等.使用forms authentication時,用戶帳戶信息一般是存儲在一個關系型數據庫里,比如Microsoft SQL Server.

支持用戶帳戶的Web應用程序可以將用戶任意劃分成不同的角色.一個角色僅僅是一個應用于某個用戶的標簽,可以獲取授權規則以及頁面級的功能.比如,某個網站可能有一個“Administrator”角色,授權規則是,只有某個屬于“Administrator”角色的用戶才能訪問某些特定的頁面.此外,對那些所有人都可以訪問的頁面,如果是以Administrators角色進行訪問的話還可以顯示其它角色看不到的數據以及其它角色不能使用的功能.通過使用roles,我們就可以定義基于role,而不是基于user的規則.


在一個ASP.NET應用程序里鑒別用戶

當一個用戶在瀏覽器的地址欄輸入一個URL或點擊一個鏈接時,瀏覽器將向服務器發出一個a Hypertext Transfer Protocol (HTTP)請求,以請求指定的資源,它可能是一個ASP.NET page, 一個image,一個JavaScrips文件,或其它類型的資源. 服務器將返回指定的資源.這樣我們必須對請求做一些判定,包括是誰發出的請求,是否通過了授權.

默認情況下,瀏覽器發出HTTP請求時并沒有包含確認信息.但如果瀏覽器包含authentication
信息的話,服務器就開始啟動authentication流程,它將對發出請求的客戶端進行確認,authentication流程采取的步驟取決于應用程序使用的authentication類型.ASP.NET支持3種類型的authentication: Windows, Passport,以及forms. 本系列我們將關注forms authentication,不過我們先花點時間看看Windows authentication.

Windows Authentication認證

Windows authentication流程使用如下的認證技術之一:

.Basic authentication
.Digest authentication
.Windows Integrated Authentication

這3種技術的工作方式都一樣:當未授權的、匿名的請求到達時,服務器將回送一個HTTP response,指出只有經過授權才能繼續操作。瀏覽器然后顯示一個對話框,要求用戶輸入用戶名和密碼(見圖1),該信息然后經由一個HTTP header發回服務器.

Security Tutorials系列文章第一章:Security Basics and ASP.NET Support
圖1.

提供的信息將與服務器的Windows User Store進行確認.這就意味著在應用程序里的每一個認證用戶在組織機構都必須有一個Windows帳戶. 這在企業內部網是很常見的.實際上,在企業內部網里使用Windows Integrated Authentication時,瀏覽器將自動的向服務器提供用于登陸網絡的credentials,因此不會出現如圖1所示的對話框.誠然,在企業內部網里使用Windows authentication是很方便可取的,但在英特網應用程序里這通常是難以實施的,因為你不可能向每一個用戶每次登陸網站時都創建一個Windows帳戶.

Forms Authentication認證

相反,Forms authentication是用來處理英特網應用程序的,記得我們說過forms authentication是將用戶的credentials輸入到一個web form來進行用戶確認的.因此當一個用戶試圖訪問一個未經授權的資源時,將會自動的轉到一個登陸頁面,以便登陸.提交的credentials將與一個用戶定制存儲——通常是一個數據庫進行核對.

當提交的credentials通過驗證后,將會為該用戶創建一個表單驗證票據(forms authentication ticket),該票據指出該用戶已經通過驗證,且包含識別信息,比如用戶名.表單驗證票據(一般)是存儲為一個cookie,放在客戶端機器上.因此,當再次訪問網站時,在HTTP請求里就包含了該表單驗證票據,web應用程序就可以識別出該用戶曾經登陸過.

圖2圖解了authentication流程.注意,ASP.NET里的authentication 和 authorization模塊扮演的是2個彼此獨立的實體.forms authentication system對用戶進行確認(或指出他們是匿名的),authorization system用來確定用戶是否有權訪問請求的資源.如果用戶未經授權(比如圖2里,匿名訪問ProtectedPage.aspx頁面),那么authorization system將指出用戶被拒絕,導致forms authentication system自動的將用戶導航到登陸頁面.

Security Tutorials系列文章第一章:Security Basics and ASP.NET Support
圖2.

我們將在接下來的二篇文章《An Overview of Forms Authentication》以及《Forms Authentication Configuration and Advanced Topics》里對forms authentication進行深入的探討,對ASP.NET的authentication的更多詳情,請參閱《ASP.NET Authentication》( http://msdn2.mirosoft.com/en-us/library/eeyk640h.aspx )


對Web Pages, Directories,以及Page Functionality的訪問進行限制

ASP.NET有2種途徑來判斷是否某個特定用戶有權訪問一個指定的文件或目錄:

.File authorization——由于ASP.NET pages和web services都是以服務器的文件系統里的文件為基礎執行的.對這些文件的訪問可以通過Access Control Lists (ACLs)來指定. File authorization通常是在Windows authentication里使用的,因為ACLs是與Windows帳戶掛鉤的當使用forms authentication時,所有的操作系統級以及文件系統級的請求都是以相同的Windows account來執行的,而與登陸的用戶無關.

.URL authorization——當使用URL authorization時,頁面開發者在Web.config文件里指定authorization rules,這些規則指明了哪些用戶或角色被授權(或禁止)對特定的頁面或目錄進行訪問.

File authorization和URL authorization對某個特定的ASP.NET頁面或某個目錄里所有的頁面定義了訪問規則,利用這些技術我們可以讓ASP.NET拒絕某些用戶對某個特定頁面的請求,或只允許一部分用戶訪問.但還有這種情形,某個頁面允許所有的用戶訪問,但頁面所提供的功能卻因用戶的不同而不同.比如很多提供用戶帳戶的網站,有某些頁面,匿名用戶和登陸用戶看到的數據和內容不一樣,匿名用戶看到的可能是一個登陸網站的鏈接,而登陸用戶看到的可能是“Welcome back, Username” ,同時還有一個供注銷的鏈接.還有一個例子:當登陸一個拍賣網站時,你看到的信息是不一樣的,這取決于你是投標人還是拍賣人.

像這樣的頁面級的調整可以通過顯式或編程的方式來實現.為了使匿名用戶和驗證用戶看到的內容不同,我們可以拖一個LoginView控件到頁面上,在AnonymousTemplate 和 LoggedInTemplate templates里分別輸入恰當的內容. 此外,你也可以編程來判斷當前的請求是否進過了認證,用戶是誰?屬于什么角色(如果有的話),然后你根據這些信息來決定來頁面上顯示或隱藏某些內容.

本系列有3篇文章是關注authorization的.《User-Based Authorization》考察了如何限制特定的用戶帳戶對一個頁面或一個目錄里所有頁面的訪問.《Role-Based Authorization》考察如何提供角色級的authorization rule.《Displaying Content Based on the Currently Logged In User》將考察如何根據登陸頁面的用戶來修改某個頁面的內容和功能.更多詳情請參閱《ASP.NET Authorization》

User Accounts and Roles

ASP.NET的forms authentication提供了一個基礎構架(infrastructure)以便于用戶登錄站點,并在不同頁面之間導航是不會丟失其認證狀態(authenticated state).URL authorization提供了一個框架來限制對ASP.NET應用程序的某個文件或文件夾進行訪問.除此之外,太提供了一個方法來存儲帳戶信息或管理角色.

在ASP.NET 2.0之前,開發人員需要自己定義的用戶和角色存儲(user and role stores).他們也需要自己設計用戶接口、為那些與用戶帳戶相關的最基本的頁面——比如登錄頁面、創建新帳戶的頁面——編寫代碼以處理相關邏輯.沒有ASP.NET里內置的用戶帳戶框架,開發人員需要自己決定如何處理哪些與用戶帳戶相關的問題,比如“如何存儲用戶密碼以及其它敏感的信息?”、“對密碼的長度以及安全性采取何種措施?”.

今天,歸功于Membership framework以及內置的Login Web controls控件,在ASP.NET應用程序里貫徹用戶帳戶變地簡單多了.Membership framework就是 System.Web.Security namespace命名空間里的一系列類,這些類提供了處理用戶帳戶相關問題的一些函數方法.Membership framework里的一個關鍵類是Membership class, 它包括的方法有:

.CreateUser——創建用戶
.DeleteUser——刪除用戶
.GetAllUsers——獲取所有用戶
.GetUser——獲取用戶
.UpdateUser——更新用戶
.ValidateUser——驗證用戶

Membership framework使用的是provider模式,它將Membership framework的API與具體的程序執行分割開來.這就使開發人員可以使用一個常用的API,來滿足某個應用程序具體的需求.簡而言之,Membership class定義了框架的最基本的功能(方法、屬性、事件等),但并沒有指定具體的實施細節.相反,Membership class的方法調用配置好了的provider,由該provider實際執行.比如,當調用Membership class的CreateUser方法時,Membership class并不知道user store的具體細節,它不清楚帳戶是存儲在一個數據庫,還是存儲在一個XML文件,又或
是其它的什么存儲方式.Membership class檢查應用程序的配置以確定使用什么provider,由該provider在相應的user store里創建新用戶帳戶.在圖3里用圖表進行相應的闡述.

Microsoft在.NET Framework里提供了2種Membership provider classes:
.ActiveDirectoryMembershipProvider——在Active Directory以及Active Directory Application Mode (ADAM) servers里執行Membership API.

.SqlMembershipProvider——在一個SQL Server數據庫里執行Membership API.

本系列文章將只關注SqlMembershipProvider.

Security Tutorials系列文章第一章:Security Basics and ASP.NET Support

圖3

provider模式的好處在于,它可由微軟,第三方開人商、或某些獨立開發人員任意實施,并無縫的融入Membership framework.比如微軟針對Access數據庫發布了一個Membership provider.對該Membership providers的更多詳情請參閱《Provider Toolkit》,它包括了各個Membership providers,簡單的自定義providers,超過100頁的關于provider模式的文檔,以及內置的Membership provider(也就是ActiveDirectoryMembershipProvider 和 SqlMembershipProvider)的完整源代碼.

ASP.NET 2.0同樣引入了Roles framework,與Membership framework類似,Roles framework也采用provider模式.其API包含在Roles class,在.NET Framework提供了3個provider classes:

.AuthorizationStoreRoleProvider——在一個authorization-manager policy store里管理角色信息,比如Active Directory或ADAM.

.RoleProvider——在一個SQL Server數據庫里貫徹roles

.WindowsTokenRoleProvider——將角色信息與登錄者的Windows group關聯起來,該方法典型的運用于Windows authentication.

本系列文章僅關注lRoleProvider.

由于provider模式包含的是相當獨立的API(Membership以及Roles classes), 就使我們可以圍繞這些API構建功能而不必擔心具體的實施細節——由頁面開發人員選定的provider來具體執行.這些統一了的API使得微軟和第三方開發商可以創建接口面向Membership 和 Roles frameworks的Web控件.ASP.NET提供了很多的Login Web controls以執行常見的用戶帳戶相關的用戶接口.比如,Login control揭示了用戶的credential,進行驗證,然后通過forms authentication使他們穿梭于網絡.LoginView control使用模板為匿名用戶和驗證用戶提供不同的顯示界面,或根據用戶角色的不同顯示不同的界面.而CreateUserWizard control則為創建一個新用戶帳戶提供了一步步的創建界面.

各個Login controls都與Membership 和 Roles frameworks產生關聯.絕大多數Login controls可以不用手寫一行代碼就可以運行.我們在后面的文章更詳細的闡述這些控件,包括如何對它們的功能進行擴展和定制.

結語:

所有提供用戶帳戶的web應用程序面臨的問題都差不多:比如運行用戶登錄,在頁面之間導航時不丟失用戶信息,需要一個創建新帳戶的頁面;要使頁面開發人員指定對哪些用戶或角色顯示什么資源、數據、功能等.在對用戶認證和授權,以及管理用戶帳戶和角色在ASP.NET應用程序里都是很容易實現的,這都要歸功于forms authentication, URL authorization,以及Membership and Roles frameworks.

在接下來的系列文章里我們將通過按部就班的方式構建一個web應用程序以對這些方面進行探討.在接下來的2篇文章里,我們將詳細的探討forms authentication,我們將實際的看到forms authentication工作流程,探討表單驗證票據(forms authentication ticket),探討security相關事項,以及如何來配置forms authentication system——運行訪問者登錄以及注銷.

祝編程快樂!

作者簡介:

Scott Mitchell,著有七本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創始人,自1998年以來一直應用 微軟Web技術。Scott是個獨立的技術咨詢顧問,培訓師,作家,最近完成了將由Sams出版社出版的新作,24小時內精通ASP.NET 2.0。他的聯系電郵為 mitchell@4guysfromrolla.com ,也可以通過他的博客 http://ScottOnWriting.NET 與他聯系。

Security Tutorials系列文章第一章:Security Basics and ASP.NET Support


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美xvideosexo另类 | 精品哟啊呦v视频在线观看 精品哟哟国产在线观看 | 99视频99 | 狠狠干天天爽 | 国产精品一区在线免费观看 | 亚洲一区中文字幕在线 | 久久精品国产一区二区三区肥胖 | 日本a视频 | 色综合合久久天天综合绕视看 | 久草热线视频 | 在线观看高清国产福利视频 | 激情五月婷婷色 | 国产精品婷婷久久爽一下 | 日韩美在线 | 91久久老司机福利精品网 | 国产精品成人一区二区1 | 亚洲综合色吧 | 日韩不卡视频在线观看 | 久久久这里有精品 | 日韩视频在线观看一区二区 | 四虎成人免费观看在线网址 | 国产精品亚洲视频 | 久久精品国产无限资源 | 欧美日韩亚洲国产一区二区综合 | 偷偷狠狠的日日2020 | 中文字幕 国产精品 | 人做人爱视频欧美在线观看 | 欧美乱大交xxxxx另类 | 久久99精品久久久久久园产越南 | 日本一区二区三区精品 | 高清亚洲综合色成在线播放放 | 天天操婷婷| 成人综合网址 | 精品一区二区三区三区 | 欧美精品国产一区二区 | 免看一级一片一在线看 | 日本色午夜| 中文字幕专区在线亚洲 | 五月婷六月婷婷 | 久久99热66这里只有精品一 | 这里只有精品在线播放 |