怎么在ASP.NET 2.0中使用Membership
2010-01-20 09:03
381 查看
摘要:
本文介绍了怎么在
ASP.NET 2.0
中使用
Membership
新特性,并且介绍了怎么两种不同的
Membership
的
Provider
:
ActiveDirectoryMembershipProvider
和
SqlMembershipProvider
,前者是基于微软活动目录服务存储用户信息的,或者是基于
SQL SERVER
存储的。
2.0
中的这个新机制大大减少了站点用户认证模块的代码量。
目录:
学习目的
使用
ActiveDirectoryMembershipProvider
使用
SqlMembershipProvider
ActiveDirectoryMembershipProvider
的一些设置参数
SqlMembershipProvider
的一些设置参数
Membership
的一些
API
学习目的:
学会使用
Membership
进行表单认证
学会设置
ActiveDirectoryMembershipProvider
学会使用
ActiveDirectoryMembershipProvider
建立认证用户
学会设置
SqlMembershipProvider
学会建立
SQL SERVER Membership
数据库
学会使用
SqlMembershipProvider
建立认证用户
使用
ActiveDirectoryMembershipProvider
如果用户信息是存储在活动目录中,而你的内网程序又因为防火墙或者需要适应不同的浏览器等原因不能使用
windows
集成认证的话,这个时候你可以选择使用
ActiveDirectoryMembershipProvider
实现表单认证
基本的步骤如下
按照以下步骤来用
ActiveDirectoryMembershipProvider
实现
asp.net
程序的用户表单认证
1
、配置表单认证
2
、配置
ActiveDirectoryMembershipProvider
3
、建立用户
4
、认证用户
1
、配置表单认证
要实现表单认证需要设置
<authentication
>
的
mode
属性为
"Forms"
,然后按照下面的例子配置
web.config
文件
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
timeout="30"
name="AppNameCookie"
path="/FormsAuth"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"/>
</authentication>
·
loginUrl
指向登录页面,你需要把它放在支持
SSL
的目录下
·
Protection
设置成
"All"
表示为认证凭据同时启用数据来源验证和加密
·
Timeout
指定了认证的生存时间
·
name
and path
are set to unique values for the current application.
·
requireSSL
设置成
"false"
表示关闭
cookie
的
SSL
加密
·
slidingExpiration
如果设置成
"true"
的话,每次访问过期时间将会重置
·
defaultUrl
就是设置程序的首页
·
cookieless
设置成
"UseCookies"
表示使用
cookie
来传递认证票据
·
enableCrossAppRedirects
设置成
"false"
表示程序不接受外部的请求
按照下面的例子为
<authentication
>
增加
<authorization
>
块,表明只有登录过的用户才能进入程序否则会被转到前面
loginUrl
设置的页面
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
2
、配置
ActiveDirectoryMembershipProvider
按照下面的例子配置
ActiveDirectoryMembershipProvider
<connectionStrings>
<add name="ADConnectionString"
connectionString=
"LDAP://domain.testing.com/CN=Users,DC=domain,DC=testing,DC=com" />
</connectionStrings>
<system.web>
...
<membership defaultProvider="MembershipADProvider">
<providers>
<add
name="MembershipADProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="<domainName>/administrator"
connectionPassword="password"/>
</providers>
</membership>
...
</system.web>
前面的代码为
<providers
>
添加
<add
>
子节点来为
membership
指定
ActiveDirectoryMembershipProvider
,活动目录中存储用户信息的连接字符串如下格式
LDAP:// server
/userdn
,
·
server
是活动目录服务器的
IP
或者名字
·
userdn
是活动目录的
DN
,格式是
/CN=Users
然后是逗号加上逗号分割开的域名,比如域名是
domain.testing.com
,连接字符串就是
LDAP://domain.testing.com/CN=Users,DC=domain,DC=testing,DC=com
注意:确保
<membership
>
的
defaultProvider
属性设置成了你的
ActiveDirectoryMembershipProvider
(在这个例子中是
MembershipADProvider
),如果需要为机器级别改变这个属性,
%windir%/Microsoft.NET/Framework/{Version}/Config/machine.config
文件中改写原有的
AspNetSqlMembershipProvider
,
AspNetSqlMembershipProvider
是使用
SQLMembershipProvider
在
/app_data
目录中的
SQL Server Express
数据库来存放用户信息的机制
3
、建立用户
可以使用下面的几种方法新建用户
·
打开
vs.net2005
的
Website
菜单,点击
ASP.NET Configuration
,然后在安全里面进行设置
·
建立一个
ASP.NET
页面,放入一个
CreateUserWizard
控件,这个控件使用配置过的
membership provider
来实现建立用户的过程
·
手动拖放填写用户名和密码的文本框然后使用
Membership API
的
CreateUser
方法来实现
注意:其实所有这些方法最终还是使用
Membership.CreateUser
来建立用户
默认配置的
ActiveDirectoryMembershipProvider
使用
UPNs
来进行名字印象,如下
attributeMapUsername="userPrincipalName"
因为所有用户名都需要按照下面的格式:
UserName@DomainName
如果手动使用
Membership.CreateUser
方法来创建用户,这么做
Membership.CreateUser("UserName@DomainName", "P@ssw0rd", "userName@emailAddress");
你也能设置
config
文件来改变映象方式:
attributeMapUsername="sAMAccountName"
如果这样设置的话,用户名就如下格式:
UserName
这样建立用户:
Membership.CreateUser("UserName", "P@ssw0rd", "userName@emailAddress")
注意:你可以设置
requiresUniqueEmail
为
"true"
来确保所有用户的
mail
地址不重复
4
、认证用户
要认证用户,你必须要建立一个登录页面,而它也就是唯一不需要验证的页面
可以使用以下方法建立登录页面:
l
用
ASP.NET 2.0
登录控件,这个控件几乎包含了所有涉及到的操作,它会自动连接配置过的
membership provider
,不需要写任何代码,登录以后控件可以保存用户信息,比如用加密过的
cookie
保存。
l
当然你也可以手动来用文本框完成这个过程,可以利用
Membership
的
ValidateUser
来判断登录情况,登录完成后你还需要用
FormsAuthentication
类来为用户的浏览器写入
cookie
,下面是例子:
if (Membership.ValidateUser(userName.Text, password.Text))
{
if (Request.QueryString["ReturnUrl"] != null)
{
FormsAuthentication.RedirectFromLoginPage(userName.Text, false);
}
else
{
FormsAuthentication.SetAuthCookie(userName.Text, false);
}
}
else
{
Response.Write("Invalid UserID and Password");
}
注意:上面两种方式都是使用
Membership.CreateUser
方法
bool isValidUser = Membership.ValidateUser("UseName@DomainName", "P@ssw0rd");
attributeMapUsername="sAMAccountName"
bool isValidUser = Membership.ValidateUser("UserName", "P@ssw0rd", "userName@emailAddress")
使用
SQLMemberShipProvider
当在外网做验证或者内网有没有配置活动目录的时候我们可以使用
SQLMembershipProvider
来作为验证的数据源,其实默认的设置就是使用
SQLMembershipProvider
的
基本步骤
按照如下的步骤来为表单验证启用
SqlMembershipProvider
1
、配置表单认证
2
、按照
membership
数据库
3
、建立用户
4
、认证用户
1
、省略。。。同
ActiveDirectoryMembershipProvider
2
、按照
membership
数据库
在使用
SqlMembershipProvider
以前需要安装一个
membership
数据库,使用一个
SQL SERVER
管理员权限登录到服务器,然后在
Visual Studio 2005
命令行模式下执行下面的语句
aspnet_regsql.exe -E -S localhost -A m
看下几个参数:
-E
表明此帐号使用
windows
集成认证
-S
表明需要安装数据库的服务器名
-A m
表明自动为
membership
建立相应的表和存储过程
注意:
Aspnet_regsql
工具同样为其他
ASP.NET 2.0
特性安装数据库,比如说成员管理,
Profile
,个性化
Web Parts
还有
Web Events
等,当然都会有其他的命令,如果你不使用任何参数的话可以以想到模式运行程序,会允许你在安装的过程中指定数据库服务器和你需要安装的组件
3
、配置
SqlMembershipProvider
Machine.config
其实默认就是使用
SQL Server Express
作为
SqlMembershipProvider
的,如果你的数据库不是运行在本机的,可以修改下配置
<connectionStrings>
<add
name="MySqlConnection" connectionString="Data
Source=MySqlServer;Initial Catalog=aspnetdb;Integrated Security=SSPI;"
/>
</connectionStrings>
<system.web>
...
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MySqlConnection"
applicationName="MyApplication"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
</providers>
</membership>
更多信息看本文“
SqlProviderMembershipProvider
属性配置”章节
Step 4. Create Users
4
、建立用户:
省略。。。同
ActiveDirectoryMembershipProvider
5
、认证用户:
省略。。。同
ActiveDirectoryMembershipProvider
ActiveDirectoryMembershipProvider
的属性配置
表
1
显示了
ActiveDirectoryMembershipProvider
的属性,默认值和用途
表
1: ActiveDirectoryMembershipProvider
的属性配置
(这部分不翻译)
如果要启用取回密码你需要在
<providers
>
后增加
<add
>
设置
attributeMapPasswordQuestion
和
attributeMapPasswordAnswer
属性来增加
ActiveDirectoryMembershipProvider
详细见
How To: Use Forms Authentication with Active Directory in ASP.NET 2.0
.
SqlMembershipProvider Configuration Attributes
SqlMembershipProvider
属性配置
表
2
显示了
SqlMembershipProvider
的属性,默认值和用途
表
2. SqlMembershipProvider
属性配置
Membership
类
表
3
列出了一些
Membership
类重要的一些方法参数和用法
表
3. Membership
类方法
注意
GetAllUsers
方法在
RTM
版本的
.NET Framework 2.0
会取消
特别注意
默认情况下表单认证的票据传输是明文的,为了防止票据被盗窃,我们还是建议你为服务器启用
SSL
。设置
requireSSL
属性为
true
来启用
SSL
,下面的例子显示了怎么启用
SSL
,还有不管用户使用
http
还是
https
形式的
url
进入网站都能启用,你可以尝试登录到
loginUrl
指定的页面看看,但是需要保证这个页面是没有任何约束的
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="https://myserver/mywebapp/secure/Login.aspx"
protection="All"
timeout="30"
name="AppNameCookie"
path="/FormsAuth"
requireSSL="true"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"/>
</authentication>
<!—
禁止没有权限的用户 -->
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</configuration>
<!—
使得登录页面没有任何限制 -->
<location path="secure">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
本文介绍了怎么在
ASP.NET 2.0
中使用
Membership
新特性,并且介绍了怎么两种不同的
Membership
的
Provider
:
ActiveDirectoryMembershipProvider
和
SqlMembershipProvider
,前者是基于微软活动目录服务存储用户信息的,或者是基于
SQL SERVER
存储的。
2.0
中的这个新机制大大减少了站点用户认证模块的代码量。
目录:
学习目的
使用
ActiveDirectoryMembershipProvider
使用
SqlMembershipProvider
ActiveDirectoryMembershipProvider
的一些设置参数
SqlMembershipProvider
的一些设置参数
Membership
的一些
API
学习目的:
学会使用
Membership
进行表单认证
学会设置
ActiveDirectoryMembershipProvider
学会使用
ActiveDirectoryMembershipProvider
建立认证用户
学会设置
SqlMembershipProvider
学会建立
SQL SERVER Membership
数据库
学会使用
SqlMembershipProvider
建立认证用户
使用
ActiveDirectoryMembershipProvider
如果用户信息是存储在活动目录中,而你的内网程序又因为防火墙或者需要适应不同的浏览器等原因不能使用
windows
集成认证的话,这个时候你可以选择使用
ActiveDirectoryMembershipProvider
实现表单认证
基本的步骤如下
按照以下步骤来用
ActiveDirectoryMembershipProvider
实现
asp.net
程序的用户表单认证
1
、配置表单认证
2
、配置
ActiveDirectoryMembershipProvider
3
、建立用户
4
、认证用户
1
、配置表单认证
要实现表单认证需要设置
<authentication
>
的
mode
属性为
"Forms"
,然后按照下面的例子配置
web.config
文件
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
timeout="30"
name="AppNameCookie"
path="/FormsAuth"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"/>
</authentication>
·
loginUrl
指向登录页面,你需要把它放在支持
SSL
的目录下
·
Protection
设置成
"All"
表示为认证凭据同时启用数据来源验证和加密
·
Timeout
指定了认证的生存时间
·
name
and path
are set to unique values for the current application.
·
requireSSL
设置成
"false"
表示关闭
cookie
的
SSL
加密
·
slidingExpiration
如果设置成
"true"
的话,每次访问过期时间将会重置
·
defaultUrl
就是设置程序的首页
·
cookieless
设置成
"UseCookies"
表示使用
cookie
来传递认证票据
·
enableCrossAppRedirects
设置成
"false"
表示程序不接受外部的请求
按照下面的例子为
<authentication
>
增加
<authorization
>
块,表明只有登录过的用户才能进入程序否则会被转到前面
loginUrl
设置的页面
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
2
、配置
ActiveDirectoryMembershipProvider
按照下面的例子配置
ActiveDirectoryMembershipProvider
<connectionStrings>
<add name="ADConnectionString"
connectionString=
"LDAP://domain.testing.com/CN=Users,DC=domain,DC=testing,DC=com" />
</connectionStrings>
<system.web>
...
<membership defaultProvider="MembershipADProvider">
<providers>
<add
name="MembershipADProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ADConnectionString"
connectionUsername="<domainName>/administrator"
connectionPassword="password"/>
</providers>
</membership>
...
</system.web>
前面的代码为
<providers
>
添加
<add
>
子节点来为
membership
指定
ActiveDirectoryMembershipProvider
,活动目录中存储用户信息的连接字符串如下格式
LDAP:// server
/userdn
,
·
server
是活动目录服务器的
IP
或者名字
·
userdn
是活动目录的
DN
,格式是
/CN=Users
然后是逗号加上逗号分割开的域名,比如域名是
domain.testing.com
,连接字符串就是
LDAP://domain.testing.com/CN=Users,DC=domain,DC=testing,DC=com
注意:确保
<membership
>
的
defaultProvider
属性设置成了你的
ActiveDirectoryMembershipProvider
(在这个例子中是
MembershipADProvider
),如果需要为机器级别改变这个属性,
%windir%/Microsoft.NET/Framework/{Version}/Config/machine.config
文件中改写原有的
AspNetSqlMembershipProvider
,
AspNetSqlMembershipProvider
是使用
SQLMembershipProvider
在
/app_data
目录中的
SQL Server Express
数据库来存放用户信息的机制
3
、建立用户
可以使用下面的几种方法新建用户
·
打开
vs.net2005
的
Website
菜单,点击
ASP.NET Configuration
,然后在安全里面进行设置
·
建立一个
ASP.NET
页面,放入一个
CreateUserWizard
控件,这个控件使用配置过的
membership provider
来实现建立用户的过程
·
手动拖放填写用户名和密码的文本框然后使用
Membership API
的
CreateUser
方法来实现
注意:其实所有这些方法最终还是使用
Membership.CreateUser
来建立用户
默认配置的
ActiveDirectoryMembershipProvider
使用
UPNs
来进行名字印象,如下
attributeMapUsername="userPrincipalName"
因为所有用户名都需要按照下面的格式:
UserName@DomainName
如果手动使用
Membership.CreateUser
方法来创建用户,这么做
Membership.CreateUser("UserName@DomainName", "P@ssw0rd", "userName@emailAddress");
你也能设置
config
文件来改变映象方式:
attributeMapUsername="sAMAccountName"
如果这样设置的话,用户名就如下格式:
UserName
这样建立用户:
Membership.CreateUser("UserName", "P@ssw0rd", "userName@emailAddress")
注意:你可以设置
requiresUniqueEmail
为
"true"
来确保所有用户的
地址不重复
4
、认证用户
要认证用户,你必须要建立一个登录页面,而它也就是唯一不需要验证的页面
可以使用以下方法建立登录页面:
l
用
ASP.NET 2.0
登录控件,这个控件几乎包含了所有涉及到的操作,它会自动连接配置过的
membership provider
,不需要写任何代码,登录以后控件可以保存用户信息,比如用加密过的
cookie
保存。
l
当然你也可以手动来用文本框完成这个过程,可以利用
Membership
的
ValidateUser
来判断登录情况,登录完成后你还需要用
FormsAuthentication
类来为用户的浏览器写入
cookie
,下面是例子:
if (Membership.ValidateUser(userName.Text, password.Text))
{
if (Request.QueryString["ReturnUrl"] != null)
{
FormsAuthentication.RedirectFromLoginPage(userName.Text, false);
}
else
{
FormsAuthentication.SetAuthCookie(userName.Text, false);
}
}
else
{
Response.Write("Invalid UserID and Password");
}
注意:上面两种方式都是使用
Membership.CreateUser
方法
bool isValidUser = Membership.ValidateUser("UseName@DomainName", "P@ssw0rd");
attributeMapUsername="sAMAccountName"
bool isValidUser = Membership.ValidateUser("UserName", "P@ssw0rd", "userName@emailAddress")
使用
SQLMemberShipProvider
当在外网做验证或者内网有没有配置活动目录的时候我们可以使用
SQLMembershipProvider
来作为验证的数据源,其实默认的设置就是使用
SQLMembershipProvider
的
基本步骤
按照如下的步骤来为表单验证启用
SqlMembershipProvider
1
、配置表单认证
2
、按照
membership
数据库
3
、建立用户
4
、认证用户
1
、省略。。。同
ActiveDirectoryMembershipProvider
2
、按照
membership
数据库
在使用
SqlMembershipProvider
以前需要安装一个
membership
数据库,使用一个
SQL SERVER
管理员权限登录到服务器,然后在
Visual Studio 2005
命令行模式下执行下面的语句
aspnet_regsql.exe -E -S localhost -A m
看下几个参数:
-E
表明此帐号使用
windows
集成认证
-S
表明需要安装数据库的服务器名
-A m
表明自动为
membership
建立相应的表和存储过程
注意:
Aspnet_regsql
工具同样为其他
ASP.NET 2.0
特性安装数据库,比如说成员管理,
Profile
,个性化
Web Parts
还有
Web Events
等,当然都会有其他的命令,如果你不使用任何参数的话可以以想到模式运行程序,会允许你在安装的过程中指定数据库服务器和你需要安装的组件
3
、配置
SqlMembershipProvider
Machine.config
其实默认就是使用
SQL Server Express
作为
SqlMembershipProvider
的,如果你的数据库不是运行在本机的,可以修改下配置
<connectionStrings>
<add
name="MySqlConnection" connectionString="Data
Source=MySqlServer;Initial Catalog=aspnetdb;Integrated Security=SSPI;"
/>
</connectionStrings>
<system.web>
...
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MySqlConnection"
applicationName="MyApplication"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
</providers>
</membership>
更多信息看本文“
SqlProviderMembershipProvider
属性配置”章节
Step 4. Create Users
4
、建立用户:
省略。。。同
ActiveDirectoryMembershipProvider
5
、认证用户:
省略。。。同
ActiveDirectoryMembershipProvider
ActiveDirectoryMembershipProvider
的属性配置
表
1
显示了
ActiveDirectoryMembershipProvider
的属性,默认值和用途
表
1: ActiveDirectoryMembershipProvider
的属性配置
(这部分不翻译)
Attribute | Default Value | Notes |
connectionStringName | Points to a connection string contained in the connection strings configuration section. This attribute is required because it points to the primary LDAP bind string that is used for create , update , get , and validate operations. | |
connectionUserName | Defines the user name used for authentication purposes when connecting to the directory. If this attribute is specified, the companion connectionPassword attribute must also be specified. This attribute is used to configure a set of credentials that can be used to connect to the directory (instead of using the process account or impersonation credentials that are in effect at the time the provider connects to the directory). | |
connectionPassword | Defines the password used for authentication purposes when connecting to the directory. If this attribute is specified, the companion connectionUserName attribute must also be specified. This attribute is used to configure a set of credentials that can be used to connect to the directory (instead of using the process account or impersonation credentials that are in effect at the time the provider connects to the directory). | |
connectionProtection | Secure | Defines the transport layer security options that are used when opening connections to the directory. This attribute can have a string value of "Secure" or "None" . If set to "Secure" , the provider attempts to select the highest level of connection security available, based on the type of directory that the provider connects to. The protection is determined as follows: SSL is first attempted because SSL is an option that works with both Active Directory and ADAM (ActiveDirectoryConnection Protection.Ssl) . If SSL is not available and the provider is connecting to Active Directory or to a domain-joined ADAM instance, encrypt-sign-and-seal is used (ActiveDirectoryConnection Protection.SignAndSeal ). If neither SSL nor encrypt-sign-seal is available, the provider generates a ProviderException , stating that it could not automatically select a secure connection to the configured directory. |
enablePasswordReset | False | Controls whether or not a password can be reset. For security reasons, with the ActiveDirectoryMembershipProvider , this attribute can only be set to true if all of the following have been set: requiresQuestionAndAnswer is set to true . passwordQuestion , passwordAnswer , attributeMapFailedPasswordAnswer Count , attributeMapFailedPassword AnswerTime , and attributeMapFailed PasswordAnswerLockoutTime have been mapped to attributes in the directory. Note : Even if this attribute is set to true , password resets are allowed only if the credentials used to perform the reset have Administrator privileges in Active Directory.. |
enableSearchMethods | False | Allows an administrator to set whether or not search-oriented methods can be called on the provider instance. Because methods such as Find* and GetAllUsers can be very expensive, the default value for this attribute is false . The following methods throw a NotSupportedException if they are called when this attribute is set to false : FindUsersByName FindUsersByEmail GetAllUsers |
requiresQuestionAnd Answer | False | Determines whether a password question and answer are required for a password reset. For security reasons, with ActiveDirectoryMembership Provider , this attribute can only be set to true if all of the following have been set: attributeMapPasswordQuestion , attributeMapPasswordAnswer , attributeMapFailedPasswordAnswerCount , attributeMapFailedPasswordAnswerTime , and attributeMapFailedPasswordAnswerLockoutTime |
applicationName | / | For this provider, applicationName is included for completeness with other providers. Internally, it does not matter what value is placed here because the application name is not used. The maximum value is 256 characters. |
requiresUniqueEmail | False | Specifies whether the e-mail values used in the application must be unique. |
maxInvalidPassword Attempts | 5 | Indicates the number of failed password attempts or failed password answer attempts allowed before a user's account is locked. When the number of failed attempts equals the value set in this attribute, the user's account is locked out. For the Active Directory provider, this attribute applies only to managing resets that use a password answer. Active Directory manages bad password attempts internally. |
passwordAttempt Window | 10 | Indicates the time window, in minutes, during which failed password attempts and failed password answer attempts are tracked. For the Active Directory provider, this attribute applies only to managing resets that use a password answer. Active Directory manages bad password attempts internally. |
passwordAnswer AttemptLockout Duration | 30 | Specifies the duration, in minutes, that a lockout due to a bad password answer is considered still in effect. Because Active Directory uses the concept of timing out bad password lockouts, this attribute is necessary to support a similar concept of timing bad password answer attempts. |
minRequiredPassword Length | 7 | Specifies the minimum number of characters required in a password. The value can be from 1 to 128. |
minRequiredNonAlpha numericCharacters | 1 | Specifies the minimum number of non-alphanumeric characters required in a password. This configuration attribute cannot be set to a value greater than the value of the minRequiredPasswordLength . This means the configuration setting must be in the range of 0–minRequiredPasswordLength , inclusive of minRequiredPasswordLength . |
passwordStrength RegularExpression | "" | Provides a valid regular expression that the provider will use as part of password strength validation. |
attributeMapUsername | userPrincipalName | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. The only directory attributes for mapping to a username if you are using Active Directory are userPrincipalName or sAMAccountName . The only allowed directory attributes for mapping to username if you are using ADAM is userPrincipalName . |
attributeMapEmail | Mail | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
attributeMapPassword Question | UNDEFINED | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
attributeMapPassword Answer | UNDEFINED | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
attributeMapFailed PasswordAnswerCount | UNDEFINED | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
attributeMapFailed PasswordAnswerTime | UNDEFINED | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
attributeMapFailed PasswordAnswer LockoutTime | UNDEFINED | Defines the mapping from a property on a MembershipUser object to an attribute within the directory. |
<providers
>
后增加
<add
>
设置
attributeMapPasswordQuestion
和
attributeMapPasswordAnswer
属性来增加
ActiveDirectoryMembershipProvider
详细见
How To: Use Forms Authentication with Active Directory in ASP.NET 2.0
.
SqlMembershipProvider Configuration Attributes
SqlMembershipProvider
属性配置
表
2
显示了
SqlMembershipProvider
的属性,默认值和用途
表
2. SqlMembershipProvider
属性配置
属性 | 默认 | 用途 |
connectionStringName | SQL SERVER 的连接字符串 | |
enablePasswordReset | False | 密码能否重置 安全原因,只有当 requiresQuestionAndAnswer 设置为 true 的时候你才可以设置 enablePasswordReset 为 true |
requiresQuestionAnd Answer | False | 是否需要启用取回密码 |
applicationName | / | 设置了它可以让多个应用程序在数据库内有所区分,不需要为每个应用建立一个数据库了 |
requiresUniqueEmail | False | 邮件地址是否需要唯一 |
maxInvalidPassword Attempts | 5 | 密码输入错误几次就会锁定用户 |
passwordAttempt Window | 10 | 每分钟可以失败的次数 |
passwordFormat | 密码方式 Clear , Encrypted , 和 Hashed . 第一种是明文存储,效率比较高,但是 SQL SERVER 中能直接读取密码,不安全 . 第二种是不可逆加密,需要一定的加密换算过程,但是比较安全 . 第三种是可逆加密,密码不能找回 | |
minRequiredPassword Length | 7 | 指定至少密码需要几位 |
minRequiredNonAlpha numericCharacters | 1 | 指定需要是非数字字母作为密码的位数,不能大于 minRequiredPassword Length |
passwordStrength RegularExpression | "" | 指定强度计算的正则表达式 |
类
表
3
列出了一些
Membership
类重要的一些方法参数和用法
表
3. Membership
类方法
方法名 | 参数 | 备注 |
CreateUser | string username – 创建的用户名 . string password – 新用户密码 string email – 新用户 地址 string passwordQuestion string passwordAnswer bool IsApproved object providerUserKey | |
DeleteUser | string username – 需要删除的用户名 bool removeAllRelatedData | 返回 true 表示删除, false 表示没有找到 |
FindUsersByName | string usernameToMatch int pageIndex int pageSize | 返回找到的用户的集合,支持通配符 "* ", "% " 和 "_ ". |
FindUsersByEmail | string emailToMatch int pageIndex int pageSize | |
GeneratePassword | int length Int numberOfNonAlpha NumericCharacters | |
GetAllUsers | int pageIndex int pageSize | 返回用户记录集 |
GetNumberOfUsersOnline | None | 返回在线的用户,活动目录不支持 |
GetUsernameByEmail | string email – 需要查找的用户的 地址 | |
UpdateUser | MembershipUser user – 需要更新的用户名 | |
ValidateUser | string username – 需要验证的用户名 string password – 需要验证的密码 |
GetAllUsers
方法在
RTM
版本的
.NET Framework 2.0
会取消
特别注意
默认情况下表单认证的票据传输是明文的,为了防止票据被盗窃,我们还是建议你为服务器启用
SSL
。设置
requireSSL
属性为
true
来启用
SSL
,下面的例子显示了怎么启用
SSL
,还有不管用户使用
http
还是
https
形式的
url
进入网站都能启用,你可以尝试登录到
loginUrl
指定的页面看看,但是需要保证这个页面是没有任何约束的
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="https://myserver/mywebapp/secure/Login.aspx"
protection="All"
timeout="30"
name="AppNameCookie"
path="/FormsAuth"
requireSSL="true"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"/>
</authentication>
<!—
禁止没有权限的用户 -->
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
</configuration>
<!—
使得登录页面没有任何限制 -->
<location path="secure">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
相关文章推荐
- (翻译)怎么在ASP.NET 2.0中使用Membership(转载)
- 怎么在ASP.NET 2.0中使用Membership
- (翻译)怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership (转载)
- 怎么在ASP.NET 2.0中使用Membership
- (翻译)怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- [翻译] 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- [导入](翻译)怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership (转载)
- 怎么在ASP.NET 2.0中使用Membership
- 怎么在ASP.NET 2.0中使用Membership