Membership基本用法
MemberShip簡介:
Membership是Asp.Net框架,用于管理網站的用戶Membership,角色Roles以及配置信息Profile。
System.Web.Security.Membership類完成對用戶類System.Web.Security.MembershiUser的添加修改刪除驗證等操作。
注冊Membership使用的數據庫:在.Net命令行窗口中運行命令aspnet_regsql。
注:此框架依賴于配置文件的支持。
1 Membership基礎應用
使用**Windows/Microsoft.Net/Framework/vXXX/aspnet_regsql.exe構建Membership使用的數據庫。
1.1Membership數據庫關系圖
1.2官方描述
注:另查SimpleMembership
System.Web.Security命名空間包含用戶在Web服務器應用程序實現Asp.Net安全性的類。
通過Asp.Net應用程序使用Membership類驗證用戶憑據并管理用戶設置(密碼和電子郵箱等)。使用Roles類可以根據指定給Web應用程序的角色的用戶組對應用程序的授權進行管理。
Membership類和Roles類都使用提供程序,及訪問應用程序的數據存儲以檢索成員資格和角色信息的類。成員資格和角色信息可以使用SqlMembershipProvider類和SqlRoleProvider類存儲在MSSQL數據庫中;可以使用ActiveDirectoryMembershipProvider類和AuthorizationStroeRoleProvider類存儲在ActiveDirectory中,還可以使用MembershipProvider類和RoleProvider類的實現存儲在自定義數據源中。
使用membership元素可以配置asp.net成員資格。訪問使用成員資格的應用程序時,asp.net構建Membership類的一個實例,該實例可用于查詢成員資格信息。MembershipUser類提供對成員資格信息的包裝。可以為應用程序創建MembershipUser類的自定義實現。
使用roleManager元素可以配置asp.net角色。asp.net創建Roles類的一個實例,該實例包含有關當前用戶的角色信息。
超鏈接:
System.Web.Security命名空間:
https://msdn.microsoft.com/zh-cn/library/System.Web.Security%28v=vs.110%29.aspx
System.Web.Security.MemberShip類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.membership(v=vs.110).aspx
System.Web.Security.Roles類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.roles(v=vs.110).aspx
System.Web.Security.SqlMembershipProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.sqlmembershipprovider%28v=vs.110%29.aspx
System.Web.Security.SqlRoleProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.sqlroleprovider(v=vs.110).aspx
System.Web.Security.ActiveDirectoryMembershipProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.activedirectorymembershipprovider%28v=vs.110%29.aspx
System.Web.Security.AuthorizationStoreRoleProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.authorizationstoreroleprovider(v=vs.110).aspx
System.Web.Security.MembershipProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.membershipprovider(v=vs.110).aspx
System.Web.Security.RoleProvider類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.roleprovider%28v=vs.110%29.aspx
membership元素(Asp.Net設置架構):
https://msdn.microsoft.com/zh-cn/library/1b9hw62f%28v=vs.110%29.aspx
System.Web.Security.MembershipUser類:
https://msdn.microsoft.com/zh-cn/library/system.web.security.membershipuser%28v=vs.110%29.aspx
roleManager元素(Asp.Net設置架構):
https://msdn.microsoft.com/zh-cn/library/ms164660(v=vs.110).aspx
1.3成員資格
成員資格使用的數據庫表有aspnet_users,aspnet_membership。在membership元素(asp.net設置架構)中進行設置時,相關設置會在aspnet_application表中建立相關信息,此表用于支持多個應用程序使用,即一個數據庫中的成員資格可供多個應用程序共享,aspnet_application就是用于跟蹤或標記成員資格信息的創立程序的名稱等信息。
成員資格使用MembershpUser封裝成員資格用戶信息,并提供部分修改更新成員資格用戶信息的方法。成員資格提供程序需繼承抽象類MembershipProvider,針對MSSQL數據實現的成員資格提供程序是SqlMembershipProvider類。成員資格提供程序可通過數據獲取在配置文件中對membership進行配置時的設置如是提供程序的名稱(Name),是否可以重置密碼(EnablePasswordReset)等,并提供操作成員資格用戶信息的方法,如驗證用戶(ValidateUser),創建用戶(CreateUser)等,這些返回用戶實體的方法中返回的就是MembershipUser類的實例。Membership類是成員資格的主要操作類,此類通過對提供程序的調用來使用戶通過它來間接實現對成員資格用戶信息的管理和維護。
如果成員資格與Forms認證同時使用,則FormsAuthenticationTicket作為票據,并使用FormsIdentity封裝此票據,有FormsIdentity構建GenericalPrincipal憑證,憑證賦予HttpContext.User屬性。使用FormsAuthentication.Encrypt可將FormsAuthenticationTicket加密為字符串此字符串可保存到cookie中,FormsAuthentication.Decrypt用于解密,并返回FormsAuthenticationTicket實例,FormsAuthenticationTicket.UserData可保存自定義信息。
|
Membership提供常規成員資格功能 |
創建信用,刪除用戶,更新用戶,獲取列表,根據名稱/郵箱查找用戶,驗證用戶,獲取在線用戶數量 |
|
MembershipUser用戶信息 |
獲取密碼和密碼問題,更改密碼,確定是否在線,確定是否經過驗證,返回最后一次活動/登錄/密碼修改時間,鎖定/取消鎖定用戶 |
|
MembershipProvider數據提供程序 |
定義成員資格所使用的提供程序實現的方法和屬性 |
|
MembershipProviderCollection多個數據提供程序 |
返回所有可用的提供程序,這些可用的提供程序在配置文件中membership/providers結點使用add子節點定義 |
|
MembershipUserCollection多個用戶信息 |
提供程序返回用戶集合時所使用的集合類型 |
|
MembershipCreateStatus用戶創建結果,枚舉類型 |
描述性信息,用戶描述提供程序在新建用戶是是成功還是失敗。 |
|
MembershipCreateUserException |
定義無法創建用戶時觸發的異常,該異常的屬性StatusCode即為MembershipCreateStatus |
|
MembershipPasswordFormat |
指定Asp.Net包含的成員資格提供程序可使用的密碼存儲格式Clear/Hashed/Encryped |
自定義成員資格提供程序:須繼承MembershipProvider抽象類并重寫每個MembershipProvider及其父類ProviderBase抽象類定義的方法。(示例:https://msdn.microsoft.com/zh-cn/library/6tc47t75%28v=vs.100%29.aspx)
注:成員資格用戶信息可自定義但同時需實現操縱自定義成員資格用戶信息的成員資格提供程序并修改數據庫表結構。
1.4 角色信息
asp.net角色管理用于控制和維護用戶的角色信息,以供系統訪問顯示使用。角色管理使用的數據表有aspnet_roles,aspnet_usersInRoles,aspnet_application。在rolesManager元素(asp.net設置架構)中配置。
角色管理使用Roles靜態類調用從抽象類RoleProvider繼承而來的SqlRoleProvider提供程序來提供針對用戶角色的諸多操作。
角色管理會使用FormsIdentity封裝當前用戶信息并用此構建RolesPrincipal賦予HttpContext.User屬性.而不是使用GenericalPrincipal.
|
Roles提供用于角色的常規管理功能 |
創建角色,添加用戶到角色,檢查用戶的特定角色,獲取用戶角色,移除用戶的特定角色。管理包含角色信息的Cookie |
|
RoleProvider提供角色管理服務使用的數據提供程序定義功能 |
定義提供程序要有Roles類使用的必須實現的功能。 |
|
RoleManagerModule向當前的User屬性中添加角色信息 |
自動創建RolePrincipal并將其附加到上下文中。已發GetRoles事件,以允許您自定義向當前用戶上下文中添加角色的過程。 |
|
RoleManagerEventArgs定義傳遞到RoleManager_GetRoles事件的參數 |
在GetRoles事件中提供對當前用戶上下文的訪問。 |
|
RolePrincipal作為Iprincipal對象并未用戶緩存角色 |
存儲當前用戶的角色信息。 從Cookie或數據庫中(如需要也可兩者)管理角色信息的檢索。 |
|
RoleService提供作為WCF服務的角色的訪問 |
檢查用戶是否屬于指定的角色。 檢索用戶的所有角色。此類未提供所有常規角色管理功能。 |
自定義角色提供程序:需繼承抽象類RoleProvider并重寫每一個方法。如果需要可修改數據表。
1.5用戶配置信息
使用到的數據表有aspnet_Profile,該表的主鍵和外鍵是UserID,關聯aspnet_Users的主鍵UserId。配置信息管理通過ProfileBase類提供的API進行,此類提供訪問當前用戶的配置信息, ProfileBase的一個實例賦予HttpContext.Profile屬性。
此類通過繼承ProfileProvider抽象類的SQLProfileProvider提供類訪問數據源。在asp.net會動態生成一個類ProfileCommand(此類官網沒有文檔,也不是類庫重定義的類,是asp.net動態生成的),此類繼承自ProfileBase,在頁中可直接使用Profile(asp.net頁中的屬性,類型為ProfileCommand)訪問用戶的配置信息。配置管理支持匿名用戶使用,但需要顯示設置(參見anonymousIdentification 元素(ASP.NET 設置架構)https://msdn.microsoft.com/zh-cn/library/ewfkf772%28v=vs.100%29.aspx),匿名用戶登錄后可能需要將匿名用戶的配置信息同步到驗證用戶的配置信息中,當匿名用戶登錄時,會觸發MigrateAnonymouse事件(Global.asax中Profile_MigrateAnonymouse(object sender, ProfileMigrateEventArgs
args)方法,參見https://msdn.microsoft.com/zh-cn/library/ewfkf772%28v=vs.100%29.aspx)。
配置信息的存儲簡單(標量)值,集合和其他復雜類型,以及用戶定義的類型(必須是可序列化的)。
自定義配置提供程序需繼承ProfileProvider,必要時可修改數據表結構。此自定義信息在配置文件的profile/properties的add子元素指定任何數據項,此處定義的多個數據項將作為ProfileProvider的GetPropertyValue和SetPropertyValue方法的System.Configuration.SetttingsPropertyValueCollection參數的內容項定義的基礎,包括類型和名稱,GetPropertyValue從數據源讀取數據用于構建返回集合,此處提供程序不關心自定義數據項在數據源中是怎么存儲的,SetPropertyValue從System.Configuration.SetttingsPropertyValueCollection參數獲取提供程序掉用方傳入的數據保存到數據源;GetPropertyValue和SetPropertyValue的另一個System.Configuration.SettingsContent類型的參數的索引可用于獲取用戶名(UserName)和驗證狀態(IsAuthenticated)。
官網示例:https://msdn.microsoft.com/zh-cn/library/8zs47k7y%28v=vs.100%29.aspx。
//修改日期:2015-03-22
總結
以上是生活随笔為你收集整理的Membership基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普通话训练
- 下一篇: 用UPUPW做服务器,通过thinkph