[转]ASP.NET 成员身价 Part.1(API)

本文转自:http://www.cnblogs.com/SkySoot/archive/2013/04/08/3008418.html

     表单验证消除了 ASP.NET
应用程序页面验证的难题,但另一方面,必须自个儿实现登录表单与底层的证据存款和储蓄之间的通讯。对每个WEB 程序来说,那几个干活儿大概都是同一的,格外单调。

       而且,表单验证只提供了注明用户的架构。假若你选用二个自定义的证据存储,就非得协调写管理用户的管理应用程序,它应当贯彻拉长用户、删除用户、重设密码等效果。那又是一串对于
Web 程序来说大约的工作。

       ASP.NET 2.0 引入了成员身价 API,ASP.NET 4.0 保留了它。分子身份 API
是以现有的表单验证架构为根基的框架。

 

ASP.NET 成员身价 API 简介

       成员身价 API
框架提供了一整套全部的用户管理效用

  • 因而编制程序大概 ASP.NET 的 Web 配置工具来创制和删除用户
  • 重置用户密码,还足以活动发送密码重置邮件
  • 设若用户通过后台程序成立,能够为用户自动生成密码,还足以将密码通过邮件自动发送给用户
  • 提供了一多级预建控件创建登录页面、注册页面、展现登录情状、为表达过和未申明过的用户提供分化的视图
  • 经过分子身价提供程序类为应用程序提供了一个抽象层,以上全体机能都足以不借助于底层的多少存款和储蓄而完全部独用立工作。底层的多寡存款和储蓄也得以在不需求修改程序的情形下,使用此外类别的数量存款和储蓄机制来替换。暗中同意意况下,成员身份
    API 使用 SQL Server Express 数据仓库储存款和储蓄用户和剧中人物音信

 

       分子身份 API 的布局(顺序亦为层次关系)

  1. 辽源控件:登录控件、密码控件、创设用户向导、状态控件
  2. 分子身价 API :Membership 类、[MembershipUser 类]
  3. 分子身份提供程序:SQL Server
    提供程序、活动目录提供程序、自定义的提供程序
  4. 成员身价存款和储蓄:SQL Server、活动目录、自定义的储存 (例如,Oracle)

 

       成员身份 API
的统筹使其能够完全部独用立于它的平底数据存款和储蓄来干活。作为程序的开发职员,首要正是和 ASP.NET
提供的控件以及 Membership 类打交道。全体与成员身价 API
相关的类都被放在了 System.Web.Security 命名空间中

分子身份 API 相关的类:

Membership 这个类是和成员资格 API 交互的主要部分,它提供了一组方法来管理用户、验证用户以及重置用户密码
MembershipCreateUserException 当视图通过 Membership 类创建用户时,如果发生错误,会抛出一个异常
MembershipUser 代表一个存储在成员资格 API 凭证存储中的单独用户。包含此用户的所有信息,Membership 类有好几个方法返回此对象,例如 GetUser()
MembershipUserCollection 成员资格用户的集合,例如 Membership.GetAllUsers() 可以返回此对象
MembershipProvider 继承这个基类可以创建自定义的成员资格提供程序,这样就可以根据你自定义的凭证存储来验证用户了
MembershipProviderCollection 计算机以及 Web 应用程序的所有可用成员资格提供程序的集合
SqlMembershipProvider MembershipProvider 类的一个实现,与 SQL Server 数据库一同工作
ActiveDirectoryMembershipProvider MembershipProvider 类的一个实现,与活动目录一同工作
ActiveDirectoryMembershipUser 这个类继承了 MembershipUser 的所有功能,并添加了一些与活动目录相关的属性

      成员身份只用来保管和认证用户,它不兑现别的授权成效,也不提供管理用户剧中人物的效果。因而,你不能够不选拔剧中人物API(后续小说会介绍)。

 

 

行使成员身价 API

       使用成员身价 API 和 安全控件在此以前,必须形成以下步骤:

  1. 在 web.config
    文件中配置表单验证、禁止匿名用户访问
  2. 树立成员身份数据存款和储蓄。你无法不在3个您挑选的数据库中开创一些表和存款和储蓄进度
  3. 布署数据库连接字符串和您想要在应用程序的
    web.config 文件中运用的成员身价提供程序
  4. 成立登录页面,使用 Membership
    类验证用户输入的证据

       使用 ASP.NET WAT
能够做到除了提供程序配置以外的别的配置步骤。ASP.NET WAT
包罗了2个固原辅导,在 VS 中挑选“网站”-“ASP.NET 配置”即可:

      
图片 1

       假定在一台运行 SQL Server Express
的机械上选取WAT,当成立第2个用户时,底层的多少存款和储蓄会活动创造。当然,即使您通过编制程序访问成员身价数据存款和储蓄,它也会自动创立,这一个效率是
SqlMembershipProvider 提供的。假若是其余版本的 SQL
Server,那么就供给手动配置数据源。

       当使用 SQL Server Express
版本时,SqlMembershipProvider 会在 App_Data 目录中成立二个名为 ASPNETDB.MDF
的新数据库。这几个数据库完结全体的架构,它是保存用户音信、剧中人物音讯、用户角色赋权、天性化和用户配置属性所必备的。

      
如若你想利用本身的数据库而不是活动成立的数据库来存款和储蓄用户音讯和剧中人物音讯,你必须在运作安全教导在此以前安顿成员身份提供程序和这些提供程序的连天新闻。

 

1. 计划表单验证

       分子身份 API
建立在表单验证的根底上,它提供了贰个现成的架构管理和认证用户。由此,必须配备程序来使用表单验证

       通常,根目录对匿名用户来说是能够访问的,它一般包罗登录页面和注册页面之类的法力。由此,在根的
web.config 中只需包含启用表单验证即可:

<system.web>

    

  <authentication mode="Forms" />

    

</system.web>

       在子目录中,你能够再添加一个web.config
配置文件来禁止匿名用户访问网站的受保证的能源
,要是有人没有经过验证就视图访问这么些目录下的能源,ASP.NET
运营时会自动将用户重定向到登录页面。

<authorization>

    

  <deny users="?"/>

    

</authorization>

 

2. 创立数量存款和储蓄

       在此以前提过,当和 ASP.NET 一起使用 SQL Server Express
版本时,SqlMembershipProvider 会自动创造这个蕴藏。但如假若其余版本的 SQL
Server,你不可能不手工创制那一个蕴藏。

       不利用基于文件自动叠加的数据库的办法还有局部任何原因:品质和并发性。

       SQL Server Express 能够以二种艺术选拔数据库:

  • 守旧形式:创造或附加1个数据库到 SQL Server 服务,然后 SQL Server
    会对数据库有一齐的决定并能够把该数据库并发地提须求三个应用程序和用户
  • 文件方式你的次序能直接待上访问 SQL
    Server 数据库文件,不需把该公文附加到 SQL Server
    实例
    。在急需时,SQL Server Express
    实例会动态的叠加或分开此文件,文件只被锁定一段较短的日子,这不光使得对数据库文件的复制变得很不难,同时,在拜访时必要分外的负载。别的,在为某些应用程序附加数据库时期,其余应用程序都不可能访问该数据库,因为它被当下运动的应用程序锁定了。这种格局适合 Windows
    客户端应用程序和开发,但不相符生育条件

 

       对于生产条件,指动手工业创立成员身份数据库。对于
SqlMembershipProvider ,创立这样叁个多少存款和储蓄意味着创设二个 SQL Server
数据库并在这几个Curry创建一组表和储存进度。ASP.NET 宣布了一文山会海 SQL
脚本得以用来手工业创立数据库和表。ASP.NET
还颁发了3个工具,它能够在你选择的数据Curry成立这么些多少库表和仓储进度。

       那几个工具叫作 aspnet_regsql.exe。经过二个指导页面只怕命令行使用专门的命令行开关都得以很便宜的运作它。无论哪一种情状,都不可能不从“Visual Studio
命令行提醒”窗口中运维它,因为它富含了带有必需工具的 .NET Framework
目录的路径消息。假诺不加任何参数运维这些工具,该工具会运营三个向导界面,它带领您通过一名目繁多步骤创造数据库:

      
图片 2

      
图片 3

      
图片 4

      
图片 5

 

       也得以由此命令行使用 aspnet_regsql.exe。实际上,那是自动化程序安装的好形式。比如,要创建成员身份
API 数据库表,能够进行下边包车型地铁一声令下:

aspnet_regsql.exe –S
(local)\SQLEXPRESS –E –A all –d MyDatabase

      
图片 6

aspnet_regsql.exe 的命令行开关

-S 服务器名 指定 SQL Server 和你想要为其安装 ASP.NET 数据库表的实例
-U 用户名 如果不用 Windows 验证连接 SQL Server,那这是必需的
-P 密码 如果指定了 –U 开关,也需要指定密码开关
-E 显式的指定使用 Windows 验证连接到 SQL Server
-C 允许指定一个用来连接数据库的完整的 ODBC 或者 OLEDB 连接字符串
-sqlexportonly 未添加和删除指定的选项生成 SQL 脚本,而无须在专门的 SQL Server 实例上安装它们
-A 安装应用程序服务。这个参数有效选项为 all、m[成员资格]、r[角色服务]、p[支持用户配置的 ASP.NET 用户配置]、c[Web 部分页面的个性化]、w[SQL Web 事件提供程序]。
-R 卸载应用程序服务。有效选项和 –A 相同
-d 让你随意指定要按照应用程序服务的数据库的名称。默认为 aspnetdb

       aspnet_regsql.exe
工具还蕴涵了其余多少个开关,用于安装基于 SQL Server 的对话状态以及安顿 SQL
缓存信赖(参考以前种类作品)

 

1. ASP.NET 服务的数据库脚本

       aspnet_regsql.exe
执行多少个脚本来创造或删除成员身份相关的数据库表。这几个本子由 .NET
Framework 提供:

      
图片 7

       基本上存在 2 体系型的台本:InstallXXX 和 UninstallXXX,你们懂的。

 

分子身价 API 的设置脚本

InstallCommon.sql 安装成员资格 API 和角色 API 所必需的一些公用的表和存储过程
InstallMembership.sql 安装成员资格 API 使用的表、存储过程和触发器。包含用户表、额外用户属性表和用来访问这些信息的存储过程表
InstallRoles.sql 安装关联用户和程序角色所需要的所有数据库表和存储过程,用于授权
InstallPersonalization.sql 包含用来创建表和存储过程的 DDL。这些表和存储过程是创建带有 Web 部件的个性化网上门户应用程序所必需的
InstallProfile.sql 创建用来支持 ASP.NET 用户配置的所有必需的表和存储过程
InstallSqlState.sql 在 SQL Server 的 TEMP 数据库中安装持久会话状态所需的表。这意味着每次 SQL Server 服务关闭时,会话状态就会丢失
InstallPersistSqlState.sql 在一个单独的 ASPState 数据库中安装持久会话状态所需的表。这意味着即使 SQL Server 服务重新启动,状态仍然存在

       假设你不想或无法应用 aspnet_regsql.exe,也能够行使 sqlcmd.exe 命令行工具来推行那几个本子:

sqlcmd –S (local)\SQLEXPRESS –E –i InstallCommon.sql

 

2. 依照文件的 SQL Server 存款和储蓄

       在此之前早已说过,那种形式允许你通过 MDF 文件向来访问 SQL Server
数据库,而不须求在三个 SQL Server
实例中成立只怕附加它们。只需将数据库文件复制到目的服务器上即可。但是,听他们说文件的方式只用于 Express
版本,大版本不协理这种情势,因为它常常对于中度可扩展的生育环境不实用

 

 

3. 安顿连接字符串和分子身份提供程序

       若是使用自身的 SQL Server
数据库,甚至自定义的分子身份提供程序和数量存款和储蓄,则必须科学的配置提供程序和适用的一连到成员身价存款和储蓄数据库的两次三番字符串。

       比如,你想采用多个名为 MyDatabase 的当地数据库配置连接字符串:

<connectionStrings>

    

  <add name="MyMembershipConnString"

    

       connectionString="data source=(local)\SQLEXPRESS;

    

                         Integrated Security=SSPI;

    

                         Initial Catalog=MyDatabase"/>

    

</connectionStrings>

       还非得为使用配置成员身价提供程序,必需把 <membership>
节添加到 web.config 文件的 <system.web> 中:

<membership defaultProvider="MyMembershipProvider">

    

  <providers>

    

    <add name="MyMembershipProvider" 

    

         connectionStringName="MyMembershipConnString"

    

         applicationName="MyMembership"

    

         enablePasswordRetrieval="false"

    

         enablePasswordRest="true"

    

         requiresQuestionAndAnswer="true"

    

         requiresUniqueEmail="true"

    

         passwordFormat="Hashed"

    

         type="System.Web.Security.SqlMembershipProvider"/>

    

  </providers>

    

</membership>

       在 <membership>
节中能够增进征三号个作为 <providers> 节的子成分。defaultProvider
脾气格外关键,那一个性情钦赐你的应用程序将运用的积极分子身价提供程序。

 

SqlMembershipProvider 的属性

name 可任意指定提供程序名称。编程访问已配置的成员资格提供程序列表时,这个名字可作引用。此外,WAT 使用它显示提供程序
applicationName 指定成员资格提供程序为之管理好用户和用户设置的程序名。可以为多个应用程序使用一个成员资格数据库。用户和角色总是和应用程序相关联。
description 描述。可选
passwordFormat 获取或设置密码在底层凭证存储中的存储格式。Clear(纯文本)、Encrypted(用本地配置的机器码加密密码)、Hashed(散列化密码)
minRequiredNonalphanumericCharacters 指定密码必需含有的非字母数字字符的个数。重要,这是指定用户所使用密码的强度要求
minRequiredPasswordLength 密码最短长度。这也是一个指定密码强度的指标
passwordStrengthRegularExpression 可以使用正则表达式指定一个有效的密码格式,这就可以非常灵活的指定密码的标准格式了
enablePasswordReset 可以重置密码。如果程序中配置了一个 SMTP 服务器,它还会发送一封 Email
enablePasswordRetrieval 如果为 true,通过 MembershipUser.GetPassword() 可以取回密码。当然,这只有在密码没有被散列化的情况下才起作用
maxInvalidPasswordAttempts 指定用户被锁定之前无效验证重试的次数。默认值 5 。
passwordAttemptWindow 设置以分钟计的时间。在这段时间内可以尝试多次无效密码或者密码回答,时间一过,用户立即被锁定。默认值 10 分钟。管理员必须再次激活这个账号
requiredQuestionAndAnswer 指定程序是否启用密码问题功能。用户忘记密码后并正确回答了问题,他可以通过 Email 重新获得一个自动生成的密码
requiredUniqueEmail 在底层的成员资格存储中指定用户的 Email 地址是否必须唯一

       applicationName
属性要尤其注意。实际上,成员身份数据Curry的保有目的都和2个应用程序相关联。如果没有在成员身份配置里钦定applicationName,API 或 WAT
会把那些目的通过名称“/”关联到根应用程序。

 

4. 开立并表达用户

       运维 WAT 切换来平安标签,选用制造用户:

      
图片 8

       创制多少个用户后,查看数据库的 aspnet_Users 表和
aspnet_Membership 表:

      
图片 9

      
图片 10

       密码和密码难点的答案都是散列字符串的款型存放在数据库中,因为您在
<membership> 配置节中对提供程序选取了 passwordFormat=”Hashed” 。

 

       今后能够利用成员身价 API
来表达这个用户了。随便创造一个登录页面,使用下边代码来注脚用户凭证:

protected void btnLogin_Click(object sender, EventArgs e)

    

{

    

    // Membership: 验证用户凭据并管理用户设置

    

    // ValidateUser(): 验证提供的用户名和密码是有效的

    

    if (Membership.ValidateUser(txtName.Text, txtPwd.Text))

    

    {

    

        FormsAuthentication.RedirectFromLoginPage(txtName.Text, false);

    

    }

    

    else

    

    {

    

        LegendStatus.Text = "Invalid user name or password.";

    

    }

    

}

 

      
你并不供给知道应用程序具体使用的是哪位应用程序(Membership
是它们的基类)。假如要换提供程序只需修改配置文件。

 

 

分类: ASP.NET

相关文章