MOSS中实现Form认证
本文主要参考了这几篇文章:http://blog.163.com/szmax_limin/blog/static/58182861200711266918320/
http://www.cnblogs.com/shangmeizhai/category/87313.html
http://www.cnblogs.com/volnet/archive/2007/04/02/696424.html
今天主要是想实现MOSS的Form认证,查了诸多资料,现根据实现流程,完整的整理粘贴一下。
主要是想实现:有一部分机器是加入域的,而另一个部分机器是未加入域的,所以希望既可以使用Windows集成验证方式也可以使用Form验证方式登录MOSS站点。
在这里我把配置的过程写下来,供他与大家参考。
整个配置过程分几部分:一、扩展Web应用;二、设置验证方式;三、修改Web.config文件。四、生成成员管理表 五、添加用户 六、添加权限
具体如下:
1.进入管理中心中的“应用程序管理”界面。
点击“创建或扩展Web应用程序”。
2.在“创建或扩展Web应用程序”管理界面,点击“扩展现有Web应用程序”。
3.在“将Web应用程序扩展到其他IIS网站”管理界面,“Web应用程序”设置节上,点击“没有选择内容”,在弹出的菜单中,选择“更改Web应用程序”。
4. 在弹出的对话框中,选择你要配置的MOSS站点。我这里有一个80端口的站点,我将选择它。
5. 对话框消失后,可以看到在“Web应用程序”设置节中显示了我的站点的名字叫“moss”。这时,我们需要在“IIS网站”设置节中,选择“新建IIS网站”选项,同时设置端口号,我设置为81。
6.把页面的滚动条向下拉,在“允许匿名访问”选项中选择“是”;同时在“区域”下拉列表框中选择“Intranet”。最后点“确定”。
完成了以上步骤,我就为我的MOSS站点(地址:http://moss 端口:80) 扩展了一个端口为81的镜像Web应用,两个Web应用使用同一个数据库。我的80端口的Web应用默认为Windows集成验证,我只需要把81端口的应用配置成Form验证,就达到了我的目的。
注意:上边文章用的是intranet,实际上我用的是internet.下边部分也是如此,凡出现intranet的地方请用internet替换。之所以如此,是因为我实在难以如原作者那样有耐心的将完整图片抓下来。造成大家理解不便的话,抱歉抱歉。
下边又用了“AspNetActiveDirectoryMembershipProvider”,实际上我用的是“AspNetSqlMembershipProvider”,所以大家按照下图设置的时候需要注意一下。
1.进入“管理中心”的“应用程序管理”界面,点击“应用程序安全性”节中的“验证提供程序”。
2.在“验证提供程序”配置管理界面中,我们可以发现列表中除了默认的提供程序外,还多了一个区域叫“Intranet”的提供程序。
3. 点击“Intranet”,将进入“编辑验证”设置界面。在“验证类型”一节中,选择“表单”选项,并在“匿名访问”一节中,勾选“启用匿名访问”复选框。
4.然后向下拉动页面滚动条,在“成员身份提供程序名称”设置节中,输入“AspNetActiveDirectoryMembershipProvider”。 ----此处用AspNetSqlMembershipProvider
角色管理員名稱:AspNetSqlRoteProvider.
6.之后,在返回的“验证提供程序”界面,将可以看到其“Intranet”提供程序的“成员身份提供程序名称”一列的值,从“Windows”变成了“AspNetActiveDirectoryMembershipProvider”。----此处将是AspNetSqlMembershipProvider
完成了以上步骤后,我们就把81端口访问的Internet区域的验证方式改成了利用AspNetSqlMembershipProvider来验证了,这个provider是System.Web.Security命名空间下的一个类,下一篇中将具体告诉大家怎样修改Web.config文件来利用这个provider,以完成最后的也是最重要的工作。
上一篇中,我们为站点的镜像81端口的Web应用设置了新的Form验证提供程序,下面我们还需要修改其Web.config文件,使其设置的提供程序可以被使用。
1.进入磁盘中81端口Web应用的主目录。
2.修改Web.config前,先复制一份做为备份。
3.然后,我们来使用visual studio2005来对其web.config文件进行修改。
4. 在Web.config文件中的<system.web>一节上面,添加如下配置节:
<connectionStrings>
<add name="AspNetSqlProvider" connectionString="Database=WSS_Content_0f64aee1faa84ca796fa30c6e72726e0;Server=localhost;User ID=sa;Password=123456;Trusted_Connection=False;" />
</connectionStrings>
注意:WSS_Content_0f64aee1faa84ca796fa30c6e72726e0是我站点对应的DB,可以通过管理站点的-- Application Management--- Content databases看到。
5.然后,需要在“<system.web>”节里面添加如下配置节:
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionStringName="AspNetSqlProvider"
passwordAttemptWindow="10"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description=""
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web,
Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider" />
<add connectionStringName="AspNetSqlProvider"
applicationName="/"
description=""
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web,
Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
注意: 1)connectionStringName属性的值不要写错,要和前面一篇设置提供程序时的名称相同。
添加完成后,保存所做修改。
6.最后,使用IE,在地址框上键入http://moss:81,进入镜像站点,在右上角点击“登录”,将会进入如下登录页面。
OK,到了最关键的地方了。
刚才上边配置认证方式为“membership”,有经验的同志应该知道,这需要用到微软自己设计的一些表,所以我们需要将这些表加给我们上边提到的的WSS_Content_0f64aee1faa84ca796fa30c6e72726e0。
步骤如下:--当然数据库要选我们自己的数据库,如我选的是WSS_Content_0f64aee1faa84ca796fa30c6e72726e0
一、 打开aspnet_regsql.exe,单独使用以下语句将启动配置向导,你也可以利用命令行参数来完成配置过程。
v2.0.50727,可以在C:\WINDOWS\Microsoft.NET\Framework\下输入dir来获取.NET的版本号
MSDN关键字:Aspnet_regsql.exe可以查找相关参数配置的信息。
二、向导模式(在数据库中添加应用程序服务(成员资格、配置文件、角色管理、个性化设置(WebPart一类的)以及SQL Web事件提供程序)如果只需要单独添加其中的一项,请使用参数配置的方式,以下方式的默认参数为all)
按照提示选择合适的就可以了,默认选中的第一项是在原有的数据库基础上添加表和存储过程来完成配置。
在这里数据库选择你要添加的数据库,一般为应用程序所在的数据库。可以在下拉列表中选择。
点下一步开始使之前的配置生效,如果您需要修改可以点上一步返回修改后再执行下一步
点完成完成添加数据库的任务!
好了,完成了关键的一步,现在表有了,可显然一个用户也没有,我们自己建页面加吗? 不用不用,看这里。需要注意的是,在下边文章提到的修改config文件出,我偷懒使用了前边所提到的config配置。不过我加了个节点“minRequiredNonalphanumericCharacters="0"”
- 先建立 ASP .NET Web Site 專案
- 修改專案的 web.config 將資料庫指向 aspnetdb
- 在 web.config 建立新增 Membership 與 Provider
- 使用 ASP.NET Configuration 產生輸入介面
- 最後,輸入欲新增的帳號與密碼即完成帳號的新增工作
打開【Microsoft Visual Studio 2005】,點選【File】【New】【Web Site...】
在【New Web Site】對話框,選擇【ASP.NET Web Site】,【Location】輸入此 Project 的名稱與存放位置,決定好之後點選【OK】
當按下 OK 之後,即開始建立專案相關的檔案,建立完成後可以看到 FormMA 這個專案下面有三個檔案,點選【web.config】修改連線字串。
在<configuration> <appSettings/> 與 <system.web> 之間,修改原來的 <connectionStrings> 為下列資訊,
<connectionStrings>
<add name="AspNetSqlProvider" connectionString="Database=WSS_Content_0f64aee1faa84ca796fa30c6e72726e0;Server=localhost;User ID=sa;Password=123456;Trusted_Connection=False;" />
</connectionStrings>
接著在 <system.web> 與 <system.web/> 之間,輸入下列資訊,
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionStringName="AspNetSqlProvider"
passwordAttemptWindow="10"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
minRequiredPasswordLength="3"
minRequiredNonalphanumericCharacters="0"
description=""
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider" />
<add connectionStringName="AspNetSqlProvider"
applicationName="/"
description=""
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</providers>
</roleManager>
當上述資訊輸入完成後,在【Solution Explorer】點選最右邊的【ASP.NET Configuration】,ASP.NET即開始產生一個虛擬的 Web 應用程式管理介面
ASP.NET網站管理工具頁面
進到此網站管理工具頁面後,我們先確認此管理工具是否有連接到資料庫,且剛剛設定的相關提供者 (Provider) 是不是都正常連接;所以我們點選【提供者】頁簽,再點選【位每項功能選取不同的提供者 (進階)】
進入進階選項後,可看到如下的畫面,我們分別測試【成員資格提供者】與【角色提供者】,點選【測試】連結即可開始測試
只要連接成功,則測試會回傳【已順利建立與資料庫的連接】的資訊
連接沒問題後,點選【安全性】頁簽,準備選取驗證類型來更改驗證方式與增加使用者帳號;點選【選取驗證類型】
選擇【從網際網路】,並按下【完成】
接下來直接點選【建立使用者】,當然您可以新增角色,但我們角色將使用 WSS 的角色,所以這邊不設定
點了建立使用者後,在下面的表單註冊帳戶資訊,如果剛有新增角色,則角色欄會出現可選取的角色,記得勾選【現用使用者】,然後按下【建立使用者】
按下建立使用者後,出現【完成...】等資訊,按下【繼續】則可在新增使用者
當建立完成後,可以在【安全性】頁簽看到使用者與角色相關的資訊
到现在为止,我们已经追加了几个用个给咱们刚才建的表中。我们使用新建的用户登录我们的站点,会无法进行任何操作,因为我们没有分配任何权限呢。
现在继续。
配制管理中心
打開管理中心所在的磁盤路徑(如我這里是C:\Inetpub\wwwroot\wss\VirtualDirectories\35784,你可以打开IIS找到管理站点的物理路径)修改其下的Web.config文件.
web.config文件的修改如下:
a. 加入一個連接資料庫的connectionStrings來連接到存儲用戶資料的sql數據庫
<connectionStrings>
<add name="AspNetSqlProvider" connectionString="Database=WSS_Content_0f64aee1faa84ca796fa30c6e72726e0;Server=localhost;User ID=sa;Password=123456;Trusted_Connection=False;" />
</connectionStrings>
b. 在system.web下加入成員及角色來源 - 表示這個系統的使用者/角色存儲在哪
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<remove name="AspNetSqlMembershipProvider" />
<add connectionStringName="AspNetSqlProvider"
passwordAttemptWindow="10"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description=""
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web,
Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider" />
<add connectionStringName="AspNetSqlProvider"
applicationName="/"
description=""
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web,
Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
c. 註意了,復雜前面的到這里來時要注冊改一個地方哦,比較下
http://moss:81中角色:<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
管理中心中的色色:<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
不一樣吧,這個可記得要改哦,不然的話你的管理中心都使用AD帳戶登錄不了了
然后,进入sharepoint 管理中心,Application Management----Site collection administrators.
将我们镜像站点的Primary site collection administrator(次要網站集合管理員):设为我们刚才新追加给数据库的用户中的随便一个,然后我们就可以使用这个用户登录我们的镜像站点了。
切忌:你第一次進入需要使用你剛添加的 次要網站集合管理員登錄哦,進去後再設置其它用戶的權限即可。
好,到此就完全结束了,好长啊。
谢谢文章开头提到的几篇引用的作者。