不得不说,ASP.NET2.0中的membership和roles实在太好用了,配合表单认证使得权限管理无比的方便。
现在我将使用过程中遇到的一些问题和需要注意的地方记录在此,方便他日需要用到却已遗忘的时候可复习重温,同时也方便不会使用membership的朋友快速上手~
由于我只用过sql server和accesss,故只提供这两种实现。
如果用的是sql server ,有一点需要注意的是在我们使用membership功能的时候,VS会自动在当前项目的app_data文件夹下建立相应的数据库,但这必须是express版的数据库才行,如果是开发版的话,就需要自己手动建立。
运行C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe
C盘是系统盘。
运行后会开启一个向导界面,一路操作下去即可。
如果使用的是ACCESS,则需下载微软提供的一个provider,sampleaccessproviders.vsi
具体哪个网址下我忘了,不过我会上传到空间中提供下载,便人便己~
sampleaccessproviders.vsi里面有一个项目,编译一下,拿到一个DLL,在需要的项目中添加引用,然后在把里面的那个ACCESS数据库拿过来,COPY到自己的项目中,在设置一下webconfig(下面会介绍),就OK了。
现在说一下使用成员和角色管理一些必要的webconfig设置。
sql server的和access大体无差别,故只说一种足以。
Code
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add connectionStringName="membershipConnect"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
属性很多,基本上不用管它,有些一看名字就明白,不明白的MSDN也有。一般自己要手动改一改的就三个地方,一个是minRequiredPasswordLength属性,它要求最短的密码长度,默认是7位,对一些小网站来说没必要这么长,故可以改改。还有是minRequiredNonalphanumericCharacters,问你密码中最少需要几个特殊字符,默认是1,但特殊字符输入不方便,有时候也没必要这么严格,故也可改改。
最后就是一定要该的地方,connectionStringName,连接字符串,默认是啥我忘了,反正是根据express版数据库配的,我们要将它该成自己的数据库连接字符串,例如:
Code
<connectionStrings>
<add name="membershipConnect" connectionString="Server=(local);database=membershipdemo;uid=sa;pwd=lolitacon"/>
</connectionStrings>
唉,为了避免二义性理解,我将自己机子上的sa密码都抖出来给人看了,一般来说这应该像黄花大闺女的肚兜一样深藏不露的。
同样,角色管理的配置也是雷同:
Code
<roleManager enabled="true"
cookieName=".ASPNETMEMBERSHIPROLES"
createPersistentCookie="true"
defaultProvider="AspNetSqlRoleProvider">
<providers>
<clear />
<add
connectionStringName="membershipConnect"
applicationName="/"
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add
applicationName="/"
name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
嗯,忘了说,成员管理需与登录组件配合使用,非要用自己的也无妨,只要知道membership用什么加密算法的,自己也用相同的加密算法,然后和数据库里的对比一下,就OK了。我没试过,因为有现成的东西在,不用白不用。
下面在说一下配合角色管理的表单验证。
比如说访问我的网站的用户一共有三类人,匿名用户、注册用户、管理员,显然,给注册用户看的一些东西不能给匿名用户看,给管理员看的一些东西谁都不能看。
那么可以建立三个文件夹,分别是public、member、admin。
Code
<location path="public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="member">
<system.web>
<authorization>
<allow roles="Admin"/>
<allow roles="member"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
上面的意思很明显,public 允许任何人访问,admin允许角色为Admin访问、拒绝其他人,member允许角色为Admin和member的、拒绝其他人。
一个用户访问了不该让它访问的页面,就跳转到登录页面:
Code
<authentication mode="Forms">
<!--name属性指定发放到客户端的cookie名称-->
<!--protection为all表示加密同时监听cookie(安全性高)-->
<!--timeout属性指定cookie的存活时间-->
<forms loginUrl="login.aspx" name="_ASPNETMEMBERSHIP" protection="All" timeout="20">
</forms>
</authentication>
关于表单认证的部分知识我是学之于CSDN上的某篇博客,谁写的我忘了,具体名字我也忘了,我只知道在百度上搜索''ASP.NET安全认证''便会出现一大片……
详细代码
accessprovider