通過使用ASP.NET應用程式(Membership)服務,可以輕松實作ASP.NET Web應用程式的認證需求。此服務資料庫可以進行應用程式的路徑管理,使用者角色和認證資訊(使用者名、密碼等)的管理,可以為使用者存儲自定義屬性和個性化資訊(Personalization,主要用于WebPart等資訊的記錄)。
一、建立資料庫
1.建立資料庫
為R21項目建立R21.Authentication資料庫。
2.向資料庫追加ASP.NET應用程式(Membership)服務表
使用控制台指令向資料庫追加表。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql -S [資料庫執行個體] -U [資料庫使用者] -P [密碼] -d R21.Authentication -A all
如果使用本地SQL Server Express資料庫(VS2005和VS2008預設安裝),資料庫執行個體位址為.\sqlexpress。對于本地資料庫可以使用Windows預設驗證使用-E參數置換-U和-P參數組合,例如:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql -S .\sqlexpress -E -
d R21.Authentication -A all
二、建立Web應用程式
1.建立R21.Web.App的Web應用程式
2.配置Web.config(這是比較複雜的部分,在稍後的文章中會對細節進行說明)
1) 設定<connectionStrings>元素,指定認證服務所需要的資料庫。
将<connectionStrings/>元素内容更改為:
<connectionStrings>
<clear/>
<add name="LocalSqlServer" connectionString ="Data Source=[SQL Server執行個體];Initial Catalog=[認證服務資料庫名];Persist Security Info=True;User ID=[使用者名];Password=[密碼];"/>
</connectionStrings>
2) 修改認證模式
将<authentication mode="Windows" />内容更改為:
<authentication mode="Forms" />
3) 指定Membership元素内容
向<System.Web>元素中追加Membership元素的配置内容,如下:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
enablePasswordRetrieval="true"
enablePasswordReset="true"
passwordFormat="Encrypted"
requiresQuestionAndAnswer="false" />
</providers>
</membership>
因為我們使用的密碼格式是加密格式(Encrypted,這種方式允許我們查詢密碼,但實際密碼仍然使用加密字元串存儲于資料庫。),是以需要指定MachineKey元素以指定加密資訊。即使使用者不打算使用加密格式我也建議大家追加MachineKey元素,因為當部署Web應用程式到複雜網絡環境(如負載平衡或Web Farm)時會通過MachineKey來表示在不同實體部署的Web應用程式的一緻性(當然前提是保持檔案系統、應用程式名稱和配置等的一緻性)。
MachineKey的驗證密鑰對使用者來說是比較複雜的應用,可以通過線上MachineKey生成工具來生成,不建議大家拷貝微軟和網上的例子,因為使用大家衆所周知的密鑰也是一種安全威脅。
MachineKey線上生成工具URL:[url]http://www.orcsweb.com/articles/aspnetmachinekey.aspx[/url]
我們将獲得的MachineKey追加到<System.Web>元素中,如下:
<machineKey validationKey='20F482E86BE69CD5DF4408FFA817B53DF8BF04EFC9A6853C771C12CDC213F22EE8186385A77C1FD53C7D1E4421689267AF82318500C0C3B44BEF453360C9B9B0' decryptionKey='0795495273974A16A0F0F72940DDD4C85C4CE5DBCA2521C5' validation='SHA1'/>
4) 指定Profile元素内容
向<System.Web>元素追加Profile内容:
<profile defaultProvider="SqlProvider">
<providers>
<clear />
<add name="SqlProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
description="SqlProfileProvider for SampleApplication" />
</providers>
<properties>
<add name="Default" />
</properties>
</profile>
Profile資訊用來指定使用者在Cookie中要記錄的屬性(properties元素),希望使用者預設情況下要指定一個屬性(即使不使用),原因是如果沒有屬性就不會生成Cookie也就不會有認證資訊被傳遞到伺服器端。
三、使用者管理
我們可以使用Visual Studio 2005/2008提供的配置控制台進行使用者的添加,也可以在頁面上放置CreateUserWizard來實作。
Visual Studio 2005/2008的ASP.NET配置控制台調用方法為在<解決方案浏覽器>裡選擇ASP.NET Web應用程式項目,然後再菜單中選擇[工程],在[工程]菜單的最下面就可以看到[ASP.NET配置...]選項,單擊後就會彈出IE視窗打開ASP.NET配置控制台。
在ASP.NET配置控制台中我們可以管理使用者和角色,以及管理通路權限,通路權限是基于角色進行資源的管理。
四、Login控件
使用ASP.NET Membership和Profile功能最強大的地方就是可以直接使用ASP.NET自帶的Login控件進行使用者操作,下面簡單介紹如何實作登入和登出。
1) 建立登入頁面
建立登入頁面Login.aspx并指定為ASP.NET Web應用程式的起始頁。
将Login控件拖拽到Login.aspx畫面上,将DestinationPageUrl的值設為~/Default.aspx。
以上操作意味着登入成功後跳轉到Default.aspx頁面。
2) 建立首頁
建立首頁Default.aspx頁面,将LoginName和LoginStatus拖拽到頁面上。
LoginStatus控件的LogoutAction屬性值設定為Redirect,并将LogoutPageUrl設定為~/Login.aspx。
轉載于:https://blog.51cto.com/zhengji/146119