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. Python开发入门与实战20-微信开发配置

    随着移动互联网时代的来临,微信已经成为移动互联网移动端的主要入口,现在很多的大型企业都有自己的微信服务号,如:银行业有自己的微银行,基金公司的公众服务号.通过微信入口可以方便快速的实现企业提供的服务. ...

  2. 解决PHP大文件上传问题

    PHP大文件上传问题    今天负责创业计划大赛的老师问我作品上报系统上传不了大文件,我当时纳闷了,做的时候没限制上传文件的大小阿,怎么会传不了呢,自己亲自体验了番,果然不 行,想了好一会儿才有点眉目 ...

  3. ie6下js更新元素display:block后,仍然不显示的hack办法

    $hotGames.html(html).removeClass("hide").show();//代码执行到这里,在ie6下仍然无法正常显示 //只有执行了下边的两行代码后,才正 ...

  4. android assets文件夹浅谈

    ---恢复内容开始--- 最近在研究assets文件夹的一些属性跟使用方法.根据网上一些文章.实例做一下汇总,拿出来跟大家分享下,有不足的地方还请多多指教. 首先了解一下assets是干什么用的,as ...

  5. Spark源码学习1.6——Executor.scala

    Executor.scala 一.Executor类 首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地.如果不是本地执行,需要启动一 ...

  6. 关于spring中无法将service注入到servlet中的问题

    首先,servlet是动态网页项目区别于普通的java项目的,是动态网页项目中web.xml主要配置文件管理的,而spring只能管理普通的pojo,而没办法直接注入,尽管你的注入方式和配置方式都没有 ...

  7. 古典问题rabbit

    /**古典问题: * 有一对兔子,从出生后第三个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? * 程序分析:兔子的规律为数列: ...

  8. Win8 安装 Scrapy

    安装Python2.7.11 32位(自带pip) 使用如下命令更新pip python -m pip install -U pip 下载lxml,建议32位,直接安装 https://pypi.py ...

  9. HDU 5384 AC自动机

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 题意:给n个母串,给m个匹配串,求每个母串依次和匹配串匹配,能得到的数目和. 分析:之前并不知道AC ...

  10. react native 之上传文件

    最近遇到react native中需要上传一些图片到后台.期间,找了一些第三方上传插件,感觉不太好用,要么只支持一个平台,要么会对其他第三方造成影响,实在无奈.只能直接使用fetch上传.其中上传文件 ...