在WSS 3.0或MOSS 2007中如果要同時使用Windows集成認證和窗體認證,必須擴展已有的Web Application到另一個端口,然后為不同的區(qū)域各自選擇認證方式。這是個不錯的方案,但仍然有以下問題,
SharePoint 2010基于聲明的混合認證方式,解決了以上問題。
為SharePoint 2010設置AspNetSqlMembership窗體認證的主要步驟與SharePoint 3.0相似。本文在不同之處會重點指出。
先使用aspnet_regsql這個工具創(chuàng)建用于Asp.Net Membership認證的數(shù)據(jù)庫,可取名為aspnetdb。
使用Visual Studio創(chuàng)建一個網站,便于在該網站的配置文件中設置提供程序。
設置<authentication mode="Forms" />,以使用窗體認證。
在web.config添加連接字符串。
<connectionStrings>
<add connectionString="Server=localhost;Database=aspnetdb;Integrated Security=true" name="MyAspNetDB" providerName="System.Data.SqlClient" />
</connectionStrings>
在<system.web>節(jié)點下添加Memebership定義。
這里都顯式定義了連接字符串、membership和roleManager,而不是使用默認的AspNetSqlMembershipProvider定義。這是為了在后面SharePoint的設置中使用相同配置。
在Visual Studio中選擇菜單網站->ASP.Net配置,檢查設置是否正確,并添加用于測試的用戶和角色。
在SharePoint 2010的管理中心新建Web應用程序。(Vista/Win7/Windows 2008下必須以管理員身份運行IE才能在管理中心創(chuàng)建Web應用程序)
打開管理中心網站的web.config。將上面步驟中的ConnectionString, Membership和RoleManager全部復制到管理中心web.config中對應位置。
并在PeoplePickerWildcards中添加所定義的MyAspNetMembers提供程序。
<PeoplePickerWildcards>
<clear />
<add key="AspNetSqlMembershipProvider" value="%" />
<add key="MyAspNetMembers" value="%" />
</PeoplePickerWildcards>
將上面步驟中的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>
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應用程序創(chuàng)建網站集并設置用戶。如圖,administrator為Windows用戶,stanley為基于ASP.Net Membership的窗體認證用戶。