用好VS2005之擴充套件membership服務

2021-04-12 15:23:46 字數 4561 閱讀 4572

asp.net 2.0中新增的最佳功能之一是新的成員身份服務,它提供了用於建立和管理使用者帳戶的易於使用的api。asp.net 1.x大規模引入了窗體身份驗證,但仍然要求您編寫相當數量的**來執行實際操作中的窗體身份驗證。成員身份服務填補了asp.net 1.x窗體身份驗證服務的不足,並且使實現窗體身份驗證變得比以前簡單得多。

成員身份api通過兩個新的類公開: membership和membershipuser。前者包含了用於建立使用者、驗證使用者以及完成其他工作的靜態方法。membershipuser代表單個使用者,它包含了用於檢索和更改密碼、獲取上次登入日期以及完成類似工作的方法和屬性。通過這兩個新的類,我們可以不用寫一行**,方便得完成對使用者的管理。 但是在實際開發過程中,絕對不能滿足我們日常開發的需要。經過日常專案的開發和網路上資料的搜尋,現將其一一列出:

一、預設的各類的資料庫是使用sql express的,而我們在實際開發中往往使用sql sever 2000或者sql server 2005,這時就需要我們修改資料庫的型別。

微軟給我們提供了乙個aspnet_regsql的命令來修改預設資料庫。開啟 visual studio 2005 命令提示,輸入aspnet_regsql,按照提示一步一步進行即可。

此時開啟資料庫,可以發現多處來了一系列"aspnet_"開頭的儲存過程,這就是我們使用membership所必需的儲存過程。

[常規],連線引數localsqlserver按照普通的sql連線字串格式。

[身份驗證],模式為forms,管理提供程式的minrequirednonalphanumericcharacters為0,這時就可以去掉預設**的必需需要輸入字母,數字等組合的密碼安全了。此步也可修改密碼最低長度和最大長度等等。

經過此步驟,系統會自動在web.config中配置好了我們所需的規則。很方便,修改web.config以後都可以通過這種圖形化工具來了。

二、由於自帶的login控制項和membership類,只提供了簡單的使用者資訊錄入,不能滿足我們專案的需要。例如:我們要使用者註冊的時候同時輸入 qq號碼,**號碼,家庭位址。那麼預設的是沒有辦法解決的。我這裡給出兩種解決方案。我分別用在了不同的專案中。優缺點大家自行判斷。

1、使用profile。此類方法網上教程已經很多。不在出重複敘述,免去賺稿費的嫌疑:)。這裡只是給出網上沒有的部分說明。

由於membership只能列出來指定組的使用者名稱,而不能列出其他的詳細資訊,我們實際使用中,往往需要對組中的其它資訊進行同時修改。我採用的是自行構造datatable的方法。見**:

public static datatable listuser(string userroles)//列出指定組的使用者資訊

return dt;

}public static void deleteuser(string username)/刪除指定使用者

public static void updateuser(string username)/更新指定使用者

2、自定義乙個membershipinfo**,同membership系統標關聯起來。自己編寫sql語句來進行查詢,修改等功能。

列出指定組的使用者

select * from aspnet_membership inner join aspnet_users on

aspnet_membership.userid=aspnet_users.userid left join memberinfo on aspnet_membership.userid=memberinfo.userid

where aspnet_membership.userid=(select userid from aspnet_usersinroles inner join

aspnet_roles on aspnet_usersinroles.roleid=aspnet_roles.roleid where rolename='admin')

刪除、修改等功能比較簡單,這裡就不作敘述。可以採用membership的createuser方法建立,然後再用sql語句寫入memberinfo表。

對於建立使用者,我們可以採取擴充套件createuserwizard控制項,或者自行寫登陸介面。

1、採取擴充套件createuserwizard控制項,我們可以使用它的模版列,此時需要注意的是:使用者名稱,密碼,提示問題,提示問題答案, email,他們的id一定要分別是username,password,question,answer,email否則會出錯,而且此時驗證控制項均不能使用。懷疑是ide的乙個bug。

如下所示,我們定義好的樣式應當是:

<wizardsteps>

<asp:createuserwizardstep runat="server"> 自定義**部分<contenttemplate>

</contenttemplate>

</asp:createuserwizardstep>

</wizardsteps>

**部分:

protected void createuserwizard1_createduser(object sender, eventargs e)

2、採取自己寫ui,個人推薦使用這種方法。靈活性比較大,而且可以使用2005強大的驗證控制項。

頁面部分比較簡單略過不再陳述。下面詳細介紹一下**部分。

此時我們需要使用membership的createuser()方法。語法我們就不再介紹。他會根據建立使用者的結果返回成乙個 membershipcreatestatus列舉類,它詳細的包含了所有建立使用者不成功的錯誤資訊。我們只需要根據他的值,就可以返回給介面相應的提示,如:使用者名稱已經存在,電子郵件已經存在等等。

對於自定義使用者資訊部分我們仍然可以採取profile或者自定義membershipinfo表的方法。

列出profile建立使用者的方法。sql語句比較簡單,略過不寫。

protected void button1_click(object sender, eventargs e)

else

}public void geterrormessage(membershipcreatestatus status)

}個人見解:採取profile的方法,比較方便,由於profile 是強型別,可以通過智慧型感知功能減少**的輸入量。採取自定義資料表的方法,需要輸入大量的sql語句,但是查詢速度比較快,效能比較強,由於 roles.getusersinrole()方法無法分頁讀取資料,只能一次性讀出來所有資料,而自寫sql 語句可以很方便的根分頁結合起來。隨著使用者量的增多,故不推薦profile方法。

三、密碼問題

個人覺得密碼是乙個比較頭疼的問題。我們在實際開發中總是需要admin組有對使用者進行密碼修改的許可權。 membership提供的修改密碼方法只能在已經知道密碼提示答案的時候才能修改。而admin組根本不可能知道使用者的密碼提示答案的。這裡有點好笑。難道是中西方文化差異?

列出個人對membership密碼研究的一些心得。

大家都知道machine.config和web.config,如果兩者發生衝突,那麼以web.config優先。

預設狀態下,membership是採用sha1的方法進行加密,然後採取一種機制,與passwordsalt進行再次加密,最後形成資料庫中顯示的密碼。可見隨著md5加密的破解,微軟對密碼的安全也煞費苦心。

有的朋友不喜歡預設的sha1加密形式,我們只需要在web.config中設定以下**來覆蓋machine.config中對密碼的設定就好了:

其中:clear - 密碼以明文形式儲存。使用者密碼可與此值直接比較,而不需要進行進一步的轉換。

md5 -使用訊息摘要 5 (md5) 雜湊摘要儲存密碼。為了驗證憑據,將使用 md5 演算法對使用者密碼進行雜湊運算並將計算出來的值與儲存的值進行比較。使用此值時,從不儲存或比較明文密碼。此演算法的效能比 sha1 好。

sha1 -使用 sha1 雜湊摘要儲存密碼。為了驗證憑據,將使用 sha1 演算法對使用者密碼進行雜湊運算並將計算出來的值與儲存的值進行比較。從不儲存明文密碼。使用該演算法可以獲得比 md5 演算法高的安全性。

然而雖然membershipuser提供了getpassword 方法,但是這是後只有在加密形式設定成clear,即密碼在資料庫中以明碼的形式存在,才能得到密碼。而changepassword必須要提供舊密碼或者密碼提示答案才可以修改。對使用者管理造成了很大的不便。找了許多資料無解。順便提帶一下:微軟的membership機制起源於csblog,並進行了一定的修改。

如果passwordsalt和password固定,那麼使用者密碼肯定一定。所以目前我採取的乙個方法就是給使用者重新設定成固定密碼的功能。

首先取得已知使用者密碼的passwordsalt和password,然後替換相應使用者的passwordsalt和password欄位。這時,使用者的密碼就已經恢復成已知的密碼了。

不可否認,membership給我們開發中創造了很大的便利,其方便的roles功能,對於我們進行許可權管理的時候提供了很好的解決方案。2005許多功能均進化自csblog這優秀的開源專案,有興趣者可以研究csblog,以進一步的了解membership的運作機制。限於篇幅,msdn上邊有做介紹的我就不再重複敘述。只介紹msdn上沒有列出的技巧跟我在專案開發中的一些心得。 asp.net 2.0為使用窗體身份驗證的web站點提供了重要的安全性優勢。通過提供使用者配置檔案儲備庫以及對角色的支援,窗體身份驗證將走出asp.net內行的視野,而得以更廣泛地實現。

VS2005驗證控制項

驗證控制項,這個對我們來說是比較重要的,雖然他不高深,可用處是很大的,常見與資訊收集 其實他也沒有多少要講的,主要有以下幾個方面 他可以被定義外觀 廢話 驗證程式的顯示方式,是靜態還是動態 注意第乙個驗證控制項的兩種 分組顯示錯誤資訊 自定義服務端驗證 自定義客戶端驗證 正規表示式 required...

vs2005配置選項

前天剛在csdn上面看到乙個問題 vs 2005開始的時候有個習慣設定 就是 c vb.net還是 我選錯了 想修改 怎麼辦 連線為 很興奮的衝上去把這個問題答了,輕鬆的拿了15分 整道題目才20分 今天又看到乙個問題 vs2005 剛啟動的那個介面,有很多配置選項的,比如 vs team,vs c...

VS2005常用外掛程式

1.visual assist 強烈推薦 va從5.0一直到現在的vax,功能越來越強大,除了以前版本中的自動識別各種關鍵字,系統函式,成員變數,自動給出輸入提示,自動更正大小寫錯誤,自動標示錯誤等等以外,最新的版本中還在 workspace 視窗中加入乙個va view,可以更方便的查詢工程中的檔...