MOSS 之 自定义MembershipProvider实现Forms方式验证——学习实战篇

      前段时间为了实现在MOSS中用自定义MembershipProvder实现Forms验证,参阅了不少同行的博文,花费了不少时间,现在终于成功。(松了一口气,也有点小成就感——虽说是参考他人的教程搞出来的,自我YY下了,大家莫见笑啊:)。)下面将整个实现过程和大家分享一下,也算做个总结。当然在此之前要先感谢下提供类似教程的同行们,因为你们的无私让小弟在前行的道路上少走了不少弯路,小弟在此向你们鞠躬了!(参考文章实在再多,在此无法一一列举,如有同行看到后觉得有似曾相识之感,希望能够一笑而过,莫要扔臭鸡蛋,烂白菜啊!呵呵)

不再废话,开始正文:

-------------------------------------------------------------------------------------------------------------

软件环境:

1.Window Srver 2003 SP2

2.IIS6.0

3.Asp.Net2.0

4.SharePoint2007中文版

5.SQL Server 2005

6.vs2005/vs2008

安装好sharepoint后,打开IIS可以发现在“应用程序池”和“网站”中都多了"SharePoint Central Administration v3”和"SharePoint 80"两项。同时点开“默认网站”->“wss”->"VirtualDirectories"会发现多了"80"和"35117"(各人的会不同)两个文件夹。在目录地址“C:\Inetpub\wwwroot\wss\VirtualDirectories”中我们能找到这两个文件夹。其中"35117”是管理中心站点,"80”是安装SharePoint时默认创建的站点。

右击"网站"->"SharePoint Central Administration v3"->"所有任务"->"SharePoint 管理中心" 可以进入到SharePoint管理中心网站。(也可以通过“开始”->"程序"->"管理工具"->"SharePoint 3.0 管理中心"进入)

创建SharePoint网站

进入SharePint管理中心,选择“应用程序管理”,点击“SharePoint Web 应用程序管理”目录下的“创建或扩展web应用程序”。选择“创建 web 应用程序” ,修改下端口号如9000,选择允许匿名访问,输入应用程序池可配置账号密码(域管理员账号),其它的选择默认,点击“确定”即可创建一个web应用程序。(创建成功后我们会发现在IIS中的“应用程序池”和“网站”中多了"SharePoint 9000"的文件夹。同样的在“默认网站”->“wss”->"VirtualDirectories"下也多了"9000"的网站。)点击成功提示中的“创建网站集”(也可以回到管理中心应用程序管理,在“SharePoint网站管理”目录下点击“创建网站集”)进入到新建网站集界面。输入标题、url路径(可选择默认)、选择模板,输入网站集主管理员(域管理员账号)点击确定。创建成功后,复制网站集的url 在新浏览器中打开,输入网站集管理员帐号密码,即可看到我们刚创建的网站。SharePoint 9000应用程序目前的验证方式是Windows验证,也是创建应用程序时默认的验证方式。在管理中心->应用程序管理->“应用程序安全性”目录下点击“验证提供程序”,更改右上角的“web 应用程序”为我们刚建的9000。可以看到成员身份提供程序为“Windows”。点击“默认”进入到“编辑验证”页,我们可以看到验证类型为“windows”,同时还有“表单”和“web单一登录”两种验证方式可选。我们要实现的就是选择“表单”验证并使用自定义的“成员身份提供程序”。该部分暂且告一段落。可以先放一边了。

实现自定义的成员身份验证程序

新建类库项目“MyProvider”,新建一个类“MyMembershipProvider”并继承抽象类“MembershipProver”,重写父类的方法。

主要重写的方法如下:

public override bool ValidateUser(string username, string password);

public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords);

public override MembershipUser GetUser(string username, bool userIsOnline);

public override MembershipUser GetUser(object providerUserKey, bool userIsOnline);

其它方法可以根据你的需要来实现。

当然实现好后最好新建一个web应用程序使用该自定义成员身份提供程序进行forms验证测试,以确保自己的实现没有问题。

注意:要把该类库生成强命名程序集,否则在外部调用时可能会出现“未法加载类型..."错误。如何强命名程序集(转)

配置MOSS网站使用自定义MembershipProver进行Forms验证

进入"管理中心"->"应用程序管理"->"验证提供程序'->选择"web 应用程序"为端口号为9000的应用程序->点击“默认”->进入到编辑验证页,选择验证方式为“Forms”,选择“启用匿名访问”,输入成员身份提供程序名称,如:MyMembershipProver(可以随意,注意要与后续配置文件中的name一致)点击确定。

a.把上一节生成的强命名程序集MyProvider.dll拷贝到应用程序9000和管理中心站点(35117)的bin目录下。

(路径:"C:\Inetpub\wwwroot\wss\VirtualDirectories")

b.把MyProvider.dll添加到GAC中。如何将程序集(.dll文件)添加到GAC(全局程序集缓存)?

c.修改应用程序9000站点的web.config配置文件(在“C:\Inetpub\wwwroot\wss\VirtualDirectories\9000”下):

在<configuration>节点中添加如下代码:

<connectionStrings>
  <add name="ConnectionString" connectionString="数据库服务器;uid=sa;pwd=sa;database=数据库"/>
</connectionStrings>

在<system.web>节点下添加如下代码:(defaultProvider名称必须和前边配置的一致)

<membership defaultProvider="MyMembershipProvider">
   <providers>
    <clear/>
    <add connectionStringName="MyConnectionString" applicationName="/" name="MyMembershipProvider" type="MyProvider.MyMembershipProvider,MyProvider,Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

  </providers>
</membership>

type内容的说明:1、命名空间.类名;2、民命空间;3、版本号;4、区域;5、强命名程序集的公钥

d.修改管理中心站点的web.config配置文件(在“C:\Inetpub\wwwroot\wss\VirtualDirectories\35117”下):

修改内容同上边的一致。

注意需要将<trust level="WSS_Minimal" originUrl="" />中的level改为“Full”。

e.重启下IIS(开始-运行(ctrl + R)->iisreset)

f.进入"管理中心"->"应用程序管理"->"网站集管理员->"网站集"选择端口号为9000的应用程序下的网站集->我们发现原来设置的网站集主管理员竟然提示"找不到完全匹配的项目",那是因为我们改为Forms验证后,他就会通过我们设置的自定义MembershipProver查询我们连接的数据库,来判断用户是否存在。这是我们输入一个数据库中已有的用户,点击保存。再次访问9000站点的网站集地址,输入一个我们数据库中已有的用户点击登录,发现提示当前登录用户为XX,但是却无法访问网站集,这是因为我们没有给该用户分配访问网站集的权限。

进入"管理中心"->"应用程序管理"->"Web 应用程序策略"->点击“添加用户”,点击下一步,输入数据库中一个有效用户,权限选择“完全控制”,点击“完成”。这时再次访问我们新建的应用程序集,输入应用程序策略中具有完全控制权限的用户名和密码,点击登录,发现已经可以进入改网站集。点击“人员和组”->"新建"->"添加用户"进入添加用户界面,在输入框中输入数据库中的用户名(多个之间可以用分号分隔),选择直接分配用户权限,选择权限如“读取 查看”,点击确定。点击网站右上角的“欢迎xx”下拉框选择“以其他身份登录”,重新回到登录页,用我们刚新建的用户登录,你会发现已经能够访问网站(当然只有查看权限)。

到此我要介绍的东西已经结束了,希望对大家能够有所帮助,也算是我近几天学习成果的总结吧!

 

posted @ 2011-05-04 13:47  贝加  阅读(560)  评论(0编辑  收藏  举报