jiaoc 发表于 2015-9-24 09:45:11

在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认证和窗体认证的用户。
页: [1]
查看完整版本: 在SharePoint 2010中使用表单认证