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类都使用提供程序,及访问应用程序的数据存储以检索成员资格和角色信息的类。成员资格和角色信息可以使用SqlMembershipProviderSqlRoleProvider存储在MSSQL数据库中;可以使用ActiveDirectoryMembershipProviderAuthorizationStroeRoleProvider存储在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基本用法的更多相关文章

  1. day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理

    归纳总结的笔记: day67 ORM 特殊的语法 一个简单的语法 --翻译成--> SQL语句 语法: 1. 操作数据库表 创建表.删除表.修改表 2. 操作数据库行 增.删.改.查 怎么连数据 ...

  2. 从Membership 到 .NET4.5 之 ASP.NET Identity

    我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. 7月10日——[HouseStark] 扬帆起航--第一次会议

    本次会议为小组成员第一次会议 内容:每个成员提出一个及以上的项目及内容,成员内部商议并投票决定要做的项目 会议时长:90分钟 地点:电三楼8楼816室 成员 项目 讨论结果 崔文祥 高校就业信息汇总网 ...

  2. mac 下配置tomcat

    下面就是一些简单的步骤,帮你把Tomcat7安装在你的Mac上. 下载一个 二进制包: apache-tomcat-7.0.27.tar.gz ,可以在Apache的官方网站找到. 双击解压在你的下载 ...

  3. C#3.0 扩展方法

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...

  4. freeCAD定制界面

    由于freecad接口是基于现代Qt工具包,它非常先进.窗口,菜单,工具栏和其他工具都可以修改,移动工作台,共享,键盘快捷键都可以设置.修改,以及宏,它可以录制和播放.定制界面是访问Tools -&g ...

  5. Java 单列模式(Singleton)

    单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 目的:使得类的一个对象成为系统中的唯一实例. 如何保证一个类只有一个实例并且这个实例易于被访问呢? 我们都 ...

  6. linux 常用操作指令(随时更新)

    ls: 查看当前目录下文件列表 -l   列出文件详细信息l(list)  -a   列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir         创建目录 -p         ...

  7. Python基础知识之认识字符串

    Python有一个名为“STR”与许多方便的功能(有一个名为“串”,你不应该使用旧的模块),内置的字符串类. 字符串常量可以通过双或单引号括起来,尽管单引号更常用. 反斜杠工作单,双引号内的文字通常的 ...

  8. 六大免费网站数据采集器对比(火车头,海纳,云采集,ET,三人行,狂人采集)

    2013年02月27日 PHP开源系统 暂无评论 阅读 497 views 次 在目前的站长圈内,比较流行的采集工具有很多,但是总结起来,比较出名的免费的就这么几个:火车头,海纳,云采集,ET,三人行 ...

  9. winform中listview imagelist问题

    参考:http://www.it165.net/pro/html/201410/23603.html 关于imagelist失真问题: 1.颜色 将ColorDepth属性设置成Depth32Bit ...

  10. KinerCode.js

    1 /*验证码*/ function KinerCode(options) { this.opt = this.extend(true, this.options, options); this.op ...