参考: http://donalconlon.wordpress.com/2010/02/23/configuring-forms-base-authentication-for-sharepoint-2010-using-iis7/

步骤概要:
1)通过C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe 创建aspnet membeship db,将SharePoint的服务账号添加为这个库的Owner。

2)针对管理中心站点,配置FBA,以便可以选择SqlUser作为站点管理员
A-通过IIS管理器,添加数据库连接字符串:AspNetSqlMembershipProvider
<connectionStrings>
<add connectionString="Server=.;Database=aspnetdb;Integrated Security=true"
name="AspNetSqlMembershipProvider" providerName="System.Data.SqlClient" />
</connectionStrings>
注意:
如果手工修改web.config,不要加<remove/>,否则会删掉默认的一个连接,造成后面配置失败.
如果采用集成windows认证访问数据库,必须确保应用程序池账号具有访问数据库的权限

B-通过IIS管理器,添加Provider/提供程序:
<roleManager>
<providers>
<add name="SqlRole" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/"
connectionStringName="AspNetSqlMembershipProvider" />
</providers>
</roleManager>
<membership>
<providers>
<add name="SqlMember" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/"
connectionStringName="AspNetSqlMembershipProvider" enablePasswordReset="false" enablePasswordRetrieval="false"
passwordFormat="Clear" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" />
</providers>
</membership>

注意:采用IIS管理器,ASP.NET下的"提供程序"操作,不要直接修改web.config

3)针对SecurityTokenWebApp,配置FBA,以便SecurityTokenWebApp的服务支持数据库用户,操作同上。

4)创建Web Application,认证方式选择Claims(基于声明的身份认证),启用Windows认证,启用FBA,提供程序名称对应填写
SqlMember和SqlRole.

5) 针对新创建的App,配置FBA,同2.

6) 添加初始用户和角色。因为第一步创建的aspnet用户库是空的,没有任何用户信息,所以首先要创建角色和用户。IIS7具有管理用户和角色的功能。
在IIS管理器中,进入"Asp.net角色",将SqlRole设置成默认提供程序,然后添加一个默认角色。
在IIS管理器中,进入"Asp.net用户",将SqlMember设置成默认提供程序,然后添加一个默认用户(管理员)。
添加完角色和用户后,再把默认角色和用户提供程序分别设置回c和i,否则用户登陆时会失败。
注意:这个步骤只针对WebApp进行,管理中心和SecurityTokenWebApp不必进行此配置。

7)创建SiteCollection,输入Sql用户作为管理员

8)现在用户已经可以登录了。但是登陆前需要先选择认证方式,一般不应该把这个复杂性暴露给客户。但是如果把Windows身份认证删除后,爬网功能会失效,所以我们采用修改系统页面的方式,使之直接跳转到Form认证的页面
修改方法:
打开C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\identitymodel\login\default.aspx,添加以下代码:
<script runat="server" language="C#">
void Page_Load(object s, EventArgs e){
string url = Request.RawUrl;
string formLoginUrl = url.Replace("/_login/", "/_forms/");
Response.Redirect(formLoginUrl,true);
}
</script>

9)启用Form认证后的用户管理如何做呢?建议采用以下开源项目:
http://sharepoint2010fba.codeplex.com/

10)在使用FBA管理用户的过程中,我们可能有疑问:asp.net 的角色在SharePoint中起什么作用呢?
asp.net的角色就相当于采用AD认证时,AD中的Domain Group,可以把角色添加到SharePoint的组中。

11)做了以上操作后,在PeoplePicker中不能对用户进行模糊搜索,需要在WebApp的web.config增加:

<PeoplePickerWildcards>
<clear />
<add key="SqlMember" value="%" />
<add key="SqlRole" value="%" />
</PeoplePickerWildcards>

12)PeoplePicker不能显示用户全名

asp.net默认的membership用户属性只支持账号,不支持显示名,peopleEditor也就无法显示用户全名。

即使用sharepoint2010fba的解决方案可以添加全名,peopleEditor也无法显示。经过研究sharepoint2010fba是先把用户账号添加进membership db,然后把用户添加到SPSite中同时设置显示名。

解决方案:既然sharepoint2010fba已经把用户添加进网站了,那么控制peopleEditor直接查询网站用户而不是查询membership即可。 

运行命令:
stsadm -o setproperty -url http://app99.test.com -pn peoplepicker-onlysearchwithinsitecollection -pv yes

后记: 在采用ActiveDirectoryMembershipProvider的时候,有同样的问题,这时候要完美的解决用户问题,设置onlysearchwithinsitecollection 后,最好开发一个自定义的添加AD账号作为表单用户的功能,在添加账号的同时设置用户其他属性。

 这样设置后,在PeoplePicker中直接输入用户名,不能完全匹配,需要设置app.PeoplePickerSettings.PeopleEditorOnlyResolveWithinSiteCollection = true;

var app = SPWebApplication.Lookup(new Uri("http://dc:93"));
Console.WriteLine(app.PeoplePickerSettings.OnlySearchWithinSiteCollection);

app.PeoplePickerSettings.PeopleEditorOnlyResolveWithinSiteCollection = true;

app.Update();

参考:http://support.microsoft.com/kb/967135/zh-cn

 

13)如果自定义页面用了PeopleEditor,可以设置: PeopleEditor1.PrincipalSource = Microsoft.SharePoint.Utilities.SPPrincipalSource.UserInfoList;

 

若是采用基于AD用户的Form认证,可以参考: http://www.c-sharpcorner.com/uploadfile/nipuntomar/sharepoint-2010-form-based-authentication-using-active-directory/

posted on 2012-12-10 14:59  jianyi  阅读(1224)  评论(1编辑  收藏  举报