在SharePoint 2010中使用表单认证

在WSS 3.0或MOSS 2007中如果要同时使用Windows集成认证和窗体认证,必须扩展已有的Web Application到另一个端口,然后为不同的区域各自选择认证方式。这是个不错的方案,但仍然有以下问题,

  • 两者本质上是两个独立的网站,依赖于同一个内容数据据。一些自定义内容需要被部署两次,例如自定义Web Part。
  • 两者的URL不同

SharePoint 2010基于声明的混合认证方式,解决了以上问题。

使用AspNetSqlMembershipProvider设置声明认证

为SharePoint 2010设置AspNetSqlMembership窗体认证的主要步骤与SharePoint 3.0相似。本文在不同之处会重点指出。

配置AspNetMembershipProvider

先使用aspnet_regsql这个工具创建用于Asp.Net Membership认证的数据库,可取名为aspnetdb。

使用Visual Studio创建一个网站,便于在该网站的配置文件中设置提供程序。
设置<authentication mode="Forms" />,以使用窗体认证。
在web.config添加连接字符串。

<connectionStrings>
  <add connectionString="Server=localhost;Database=aspnetdb;Integrated Security=true" name="MyAspNetDB" providerName="System.Data.SqlClient" />
</connectionStrings>

在<system.web>节点下添加Memebership定义。

<membership defaultProvider="MyAspNetMembers">
  
<providers>
<add connectionStringName="MyAspNetDB"
applicationName
="/"
name
="MyAspNetMembers"
type
="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MyAspNetRoles">
<providers>
  
<add connectionStringName="MyAspNetDB"
  applicationName
="/"
  name
="MyAspNetRoles"
  type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

这里都显式定义了连接字符串、membership和roleManager,而不是使用默认的AspNetSqlMembershipProvider定义。这是为了在后面SharePoint的设置中使用相同配置。

在Visual Studio中选择菜单网站->ASP.Net配置,检查设置是否正确,并添加用于测试的用户和角色。

创建SharePoint 2010 Web应用程序

在SharePoint 2010的管理中心新建Web应用程序。(Vista/Win7/Windows 2008下必须以管理员身份运行IE才能在管理中心创建Web应用程序)


此处,必须选择“基于声明的身份验证”才能使用基于窗体的身份认证。这与SharePoint 3.0不同。如果在这里选择了“经典模式身份认证”,SharePoint 2010仍然会允许扩展Web应用程序并设置不同的区域,但是在区域的安全性设置中,无法设置窗体认证。
选中“启用基于窗体的身份验证”,并在下方的文本框中输入在上面步骤中设置的Membership提供程序和角色管理器名称。

设置SharePoint 2010管理中心网站web.config

打开管理中心网站的web.config。将上面步骤中的ConnectionString, Membership和RoleManager全部复制到管理中心web.config中对应位置。
并在PeoplePickerWildcards中添加所定义的MyAspNetMembers提供程序。

<PeoplePickerWildcards>
<clear />
<add key="AspNetSqlMembershipProvider" value="%" />
<add key="MyAspNetMembers" value="%" />
</PeoplePickerWildcards>

设置新建Web应用程序的web.config

将上面步骤中的ConnectionString, Membership和RoleManager设置添加到新建web应用程序的web.config对应位置中。注意保留其中已有的提供程序与默认值。

<membership defaultProvider="i">
<providers>
<add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<add connectionStringName="MyAspNetDB"
applicationName
="/"
name
="MyAspNetMembers"
type
="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>
<roleManager defaultProvider="c" enabled="true" cacheRolesInCookie="false">
<providers>
<add name="c" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthRoleProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<add connectionStringName="MyAspNetDB"
applicationName
="/"
name
="MyAspNetRoles"
type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

设置Security Token Service(STS)的web.config

SharePoint 2010是通过STS验证用户声明的,为了让STS能进行正确的验证,必须在STS的web.config中配置同样的提供程序。
STS工具的路径为C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\SecurityToken。

打开其web.config,添加配置如下。

<system.web>
<membership>
<providers>
<add connectionStringName="MyAspNetDB"
applicationName
="/"
name
="MyAspNetMembers"
type
="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</membership>

<roleManager>
<providers>
<add connectionStringName="MyAspNetDB"
applicationName
="/"
name
="MyAspNetRoles"
type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
</system.web>
<connectionStrings>
<add connectionString="Server=localhost;Database=aspnetdb;Integrated Security=true" name="MyAspNetDB" providerName="System.Data.SqlClient" />
</connectionStrings>

其中,不需要为membership或roleManager设置默认的提供程序。

创建网站集并设置用户

一切配置就绪后,就可以为新建的Web应用程序创建网站集并设置用户。如图,administrator为Windows用户,stanley为基于ASP.Net Membership的窗体认证用户。


点击“浏览”图标可以查找到Windows认证和窗体认证的用户。

posted @ 2010-07-04 16:14  肖云伟  阅读(3245)  评论(2编辑  收藏  举报