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类:
System.Web.Security.SqlRoleProvider类:
https://msdn.microsoft.com/zh-cn/library/system.web.security.sqlroleprovider(v=vs.110).aspx
System.Web.Security.ActiveDirectoryMembershipProvider类:
System.Web.Security.AuthorizationStoreRoleProvider类:
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