最近有几个MOSS
网友围绕着MOSS
表单认证的一些细节错误,团团转。昨晚有空刚好Demo
一遍,记得自己第一次做表单认证也遇到一些小细节错误,当时忘了做笔记,刚好这次用详细记录的方式补上,以便给刚学MOSS
的新人提供一个入门小指导,更好的完成表单认证。
首先,必须明确
SharePoint
网站默认是使用
Active Directory
集成认证,但如果是用于
Internet
场景,那么由于难以为访问用户建立
AD
帐号,解决方法通常是将
SharePoint
网站配置成使用
Forms
认证,在一个自定义的数据源(比如
SQL
数据库或其他的什么地方)中存储这些用户的凭证信息。
其次,必须充分了解ASP.NET 2.0 Membership
和Roles
的两个类的用法和一些属性(这个笔者就不详细说了。。)
再次,小了解下把应用程序集部署到Bin
目录和GAC
下有和区别(这一些小细节。。。初学者还是稍微了解下)
最后请看操作步骤:
运行aspnet_regsql.exe
(所在目录参考如下)
点击下一步
配置完成之后,打开VS新建一个web应用程序,取名为LoginByFormWebPart
点击项目添加三个用户控件分别命名为:Default.ascx(登入页面)Register.ascx(用户注册页面),CreateRoles.ascx(新建角色页面),笔者这么做的目的只是为了便于动态添加角色成员,你也可以直接点击VS2005->项目->ASP.NET配置快速 完成MEMBERSHIP和Roles的相关设置。点击项目属性记得签名生成强程序集。如图:
点击项目属性->生成事件->生成后事件命令(记得把应用程序集的端口号改成你本机的)
备注:
也可以直接在项目新建个记事本把上面命令行写成批处理文件,以便项目的生成发布到MOSS站点的操作。
项目配置文件(webconfig)
在<System.web>方添加
1
<
connectionStrings
>
2 < add name = " AppConnectionString " connectionString = " Data Source=.;database=aspnetdb;integrated security=true " />
3 </ connectionStrings >
2 < add name = " AppConnectionString " connectionString = " Data Source=.;database=aspnetdb;integrated security=true " />
3 </ connectionStrings >
在<system.web>里面添加
membership .....rileManager
1 <membership defaultProvider="AspNetSqlProvider">
2 <providers>
3 <add connectionStringName="AppConnectionString" applicationName="/" description="" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" requiresUniqueEmail="false" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" name="AspNetSqlProvider" type="System.Web.Security.SqlMembershipProvider"/>
4 </providers>
5 </membership>
6 <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider1">
7 <providers>
8 <add connectionStringName="AppConnectionString" applicationName="/" name="AspNetSqlRoleProvider1" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
9 </providers>
10 </roleManager>
1 <membership defaultProvider="AspNetSqlProvider">
2 <providers>
3 <add connectionStringName="AppConnectionString" applicationName="/" description="" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" requiresUniqueEmail="false" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" name="AspNetSqlProvider" type="System.Web.Security.SqlMembershipProvider"/>
4 </providers>
5 </membership>
6 <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider1">
7 <providers>
8 <add connectionStringName="AppConnectionString" applicationName="/" name="AspNetSqlRoleProvider1" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
9 </providers>
10 </roleManager>
整个项目
3
个页面的操作图:
点击注册
假如还没创建角色,Register.aspx页面会给用户做出提示先创建角色成员
注册成功用户登录
这足以说明在VS项目工程中你配置的表单验证登录成功!
接下来要完成的工作就是配置管理中心应用程序的webconfig
和你要完成Form
认证的那个应用程序的webconfig
。这两个地方跟VS
项目中配置的webconfig
一样,
稍微要改动的就是管理中心的
<roleManager>
标签里的
defaultProvider属性修改成继承与WSS3.0的角色管理以便更好的和WSS3.0整合(即defaultProvider="AspNetWindowsTokenRoleProvider">
)
。
若使用自定的义的就不能与WSS3.0角色管理进行整合,后果就会造成你管理员也无权限在管理中心进行页面登录与操作,这也是之前笔者遇到过的。(所以这点大家要注意下。
)
在<system.web>上方插入
1
<
connectionStrings
>
2 < add name = " AppConnectionString " connectionString = " Data Source=.;database=aspnetdb;integrated security=true " />
3 </ connectionStrings >
2 < add name = " AppConnectionString " connectionString = " Data Source=.;database=aspnetdb;integrated security=true " />
3 </ connectionStrings >
<system.web>里面插入
membership
1 <membership defaultProvider="AspNetSqlProvider">
2 <providers>
3 <add connectionStringName="AppConnectionString" applicationName="/" description="" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" requiresUniqueEmail="false" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" name="AspNetSqlProvider" type="System.Web.Security.SqlMembershipProvider"/>
4 </providers>
5 </membership>
6 <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider1">
7 <providers>
8 <add connectionStringName="AppConnectionString" applicationName="/" name="AspNetSqlRoleProvider1" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
9 </providers>
10 </roleManager>
1 <membership defaultProvider="AspNetSqlProvider">
2 <providers>
3 <add connectionStringName="AppConnectionString" applicationName="/" description="" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" requiresUniqueEmail="false" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" name="AspNetSqlProvider" type="System.Web.Security.SqlMembershipProvider"/>
4 </providers>
5 </membership>
6 <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider1">
7 <providers>
8 <add connectionStringName="AppConnectionString" applicationName="/" name="AspNetSqlRoleProvider1" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
9 </providers>
10 </roleManager>
配置好这2
个地方的web.config
之后,进入管理中心->
应用程序管理->
验证提供程序,
可以看到MOSS
提供的成员身份认证默认都为Windows
认证
点击【默认】编辑验证,选择要采取FORM认证的应用程序集端口:验证类型选为:表单。填写成员身份提供程序名称和角色管理器名称。
点击保存。
进入刚设定的站点,会发现登录界面就有了变化了。
可能初学者输入用户名,密码以为一切都
OK
了,结果可能碰到如下问题:
这个原因就是,表单认证的用户虽然在数据库存在了但并没有在MOSS 的用户组中。所以得返回管理中心->应用程序管理->网站集所有者。可以看到之前为Windows认证设置的mosing"administrator管理员已经找不到。
接着输入刚创建的yongfeng和萍水相逢用户作为管理员,经过验证通过,说明Form认证成功!
再次登录
OK
为了便于创建表单用户,用户可以在首页用DESIGNER布局一个链接指向(Register.aspx新建表单用户页面)这块笔者就不进行操作了。
返回VS
项目程序,新建一个【锋】的用户。指定角色选为【查看角色】。这时MOSS
管理员在站点只要为这个角色添加相应的权限,属于该角色的所有用户都具有这个角色的相应的权限。
管理员进入网站设置->
权限->
添加产看者用户
为一个查看者角色。
笔者给查看角色添加一个查看者权限后。属于该角色下的【锋】用户,就无需再经过验证,就可以直接登录到该站点。
转载于:https://blog.51cto.com/nightcat/193987