天天看點

ASP.NET Web應用程式認證

通過使用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