在之前博客中已经描述了User Profile的两种配置场景,这篇博客将详细介绍微软官方推荐的配置方法。
测试环境的架构可以参考之前的博客内容,这里就不做介绍了,直接切入主题。
1. 在sp-farm1中创建User Profile Services服务应用程序。创建的过程因为不是这篇博客的重点就不做过多描述。
2. 配置AD的连接器,将contoso.com中需要加入网站的用户,全部同步到User Profile中,在同步之前需要确认user Profile同步服务是否启动,如果没有启动,将这个服务启动,这个启动过程会比较慢,启动的要看机器的性能,请耐心等待。
3. 配置个人网站,可参考http://technet.microsoft.com/zh-cn/library/ee624362.aspx,如果你还是看不明白,那你可以使用向导的方式添加User Profile Services。这样我的网站功能自动就会被创建了。
4.配置其他场与User Profile Services场的互相信任。微软官方叫这两个场为 PublishingFarm(发布场)和ConsumingFarm(消费场),我看到所有的相关的内容中也都用这个名字,索性我也用这名字来称呼它们,免得弄混。我的发布场是sp-farm1,消费场是sp-farm2。
5.在配置互相信任之前,需要将两个场的证书导出。使用下面的PowerShell 命令分别在两个场中导出证书。在运行所有PowerShell命令完成时,都不要关闭PowerShell窗口,因为很多变量会多次引用。
a. 在消费场中运行
$rootCert = (Get-SPCertificateAuthority).RootCertificate
$rootCert.Export("Cert") | Set-Content <C:\ConsumingFarmRoot.cer> -Encoding byte
$stsCert = (Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate
$stsCert.Export("Cert") | Set-Content <C:\ConsumingFarmSTS.cer> -Encoding byte
b.在发布场中运行
$rootCert = (Get-SPCertificateAuthority).RootCertificate
$rootCert.Export("Cert") | Set-Content <C:\PublishingFarmRoot.cer> -Encoding byte
6. 将消费场中导出到证书文件拷贝到发布场中,同时将发布场中的证书拷贝到消费场中。我建议大家使用剪切的方式,免得文件同时在一个目录下的时候会搞混。我第一次配置的时候没成功,可能就是因为证书弄混了。
7. 确认所有证书的正确性,是否正确的复制了证书。然后就需要配置服务场的信任关系了。
a.在消费场中运行,其中 "sp-farm1"这个名字,叫什么都可以,只要能区分出来这是什么。
$trustCert = Get-PfxCertificate "C:\PublishingFarmRoot.cer"
New-SPTrustedRootAuthority "sp-farm1" -Certificate $trustCert
b.在发布场中运行
$trustCert = Get-PfxCertificate <C:\ConsumingFarmRoot.cer>
New-SPTrustedRootAuthority "sp-farm2" -Certificate $trustCert
$stsCert = Get-PfxCertificate <c:\ConsumingFarmSTS.cer>
New-SPTrustedServiceTokenIssuer "sp-farm2" -Certificate $stsCert
$farmid = "<guid>"; #farmid是要消费场中运行PowerShell "Get-SPFarm | Select Id"可以取到。
$security = Get-SPTopologyServiceApplication | Get-SPServiceApplicationSecurity
$claimProvider = (Get-SPClaimProvider System).ClaimProvider
$principal = New-SPClaimsPrincipal -ClaimType http://schemas.microsoft.com/sharepoint/2009/08/claims/farmid -ClaimProvider $claimProvider -ClaimValue $farmid
Grant-SPObjectSecurity -Identity $security -Principal $principal -Rights "完全控制"
Get-SPTopologyServiceApplication | Set-SPServiceApplicationSecurity -ObjectSecurity $security
8. 到目前为止,我们配置服务器的互相信任,并为消费场设置了应用程序的控制权限。但要是实现关注功能,还是在做一些Power Shell命令
a. 在发布场中运行以下命令,其中realm是为了给发布场配置一个别名,也只能这么理解了。那一串00000003……的guid是固定值,不能变。
Set-SPAuthenticationRealm -realm "myrealm"
$sts=Get-SPSecurityTokenServiceConfig
$Realm=Get-SpAuthenticationRealm
$nameId = "00000003-0000-0ff1-ce00-000000000000@$Realm"
Write-Host "Setting STS NameId to $nameId"
$sts.NameIdentifier = $nameId
$sts.Update()
$c = Get-SPSecurityTokenServiceConfig
$c.AllowMetadataOverHttp = $true #needed if you are not using ssl
$c.AllowOAuthOverHttp=$true #needed if you are not using ssl
$c.Update()
iisreset
b. 在消费场中同样要执行一段类似的PowerShell
Set-SPAuthenticationRealm -realm "myrealm"
$sts=Get-SPSecurityTokenServiceConfig
$Realm=Get-SpAuthenticationRealm
$nameId = "00000003-0000-0ff1-ce00-000000000000@$Realm"
Write-Host "Setting STS NameId to $nameId"
$sts.NameIdentifier = $nameId
$sts.Update()
$c = Get-SPSecurityTokenServiceConfig
$c.AllowMetadataOverHttp = $true #needed if you are not using ssl
$c.AllowOAuthOverHttp=$true #needed if you are not using ssl
$c.Update()
iisreset
9.到这里还没有结束,因为在2013这个版本中,SharePoint使用OAuth协议,所以我们需要配置以下OAuth的信任节点。如果你配置过SharePoint 2013和Exchange2013,lync 2013的信任,对这个一定不陌生,话说之前配置 SharePoint网站邮箱时,也把我折磨的够呛啊。
a. 在消费场运行以下PowerShell命令。
New-SPTrustedSecurityTokenIssuer –MetadataEndpoint "http://sp-farm1/_layouts/15/metadata/json/1" –Name "sp-farm1.contoso.com" -RegisteredIssuerName $nameId
执行完成时输入个Y直接运行就ok。
b. 在发布场运行
New-SPTrustedSecurityTokenIssuer –MetadataEndpoint "http://sp-farm2/_layouts/15/metadata/json/1" –Name "sp-farm2.contoso.com" -RegisteredIssuerName $nameId
同样输入一个Y。
运行完成后,PowerShell命令就执行到此为止了。接下来要做的就是发布User Profile Services。
10. 通过管理中心进入到管理服务应用程序,找到user Profile Services,选中。确认选中后在Ribbon菜单中点击“发布”
11. 在弹出窗口中,选中“向其他场发布此服务应用程序”,这里就会看到说要不这个应用程序一定要做户型信任。点击这个链接就可以看到之前用PowerShell添加的服务器名称了。要是没有证明你PowerShell执行的不正确。
拷贝“发布的URL”那一串地址到一个txt文件,一会你会用的到。然后点击确定。
12. 发布已经完成了,接下来就是要在消费场中添加一个User Profile Services的链接了。打开消费场的管理中心,同样进入到管理服务应用程序页面。
点击ribbon上的连接。找到User Profile Services。
13. 在弹出窗口中输入之前拷贝出来的那一长串URL地址。就是发布出来User Profile Servies的地址,输入完以后点击确定。这个地方,可能会有些反应迟钝,点完以后没啥反应,别急等一会就好了。点完以后还会有一个确认画面,在那个画面中也会有一个确定要点一下,不过你会发现那个按钮是灰的根本点不了,这个时候你只要点一下页面中的User Profile Services的那个链接地址一下,就可以点确定。(我是没找到原因为什么要这样)。到这里User Profile Services的发布就完成了。
14. 我们需要注意一点,在没有User Profile Services的服务时,用户登录网站时(见图),新闻源,SkyDrive Pro,网站 是没有地。只有提供User Profile服务才会出现。
15. 到这里基本配置已经完成了,但你会发现你的消费场里,为啥还看不到 “新闻源、SkyDrive Pro”这些东西呢,原因是你需要在发布场中运行一下 用户配置文件同步。同步完成以后就会有了。用户登录以后点击新闻源就会跳转到发布场也就是sp-farm1场中创建个人站点。同样其他场要想使用User Profile Services需要使用同样的操作在来一遍。到此为止我们已将微软官方推荐的User Profile 服务配置完成了, 整个企业环境内就提供了一个 User Profile Services 实现了用户信息的统一管理。但你别高兴的太早。你点一下网站或文档的关注看一下。针对用户的关注是没有问题地,因为所有用户都在同一个场里,但你关注网站和文档的时候就会报错。因为他们不在一个场里。错误信息全部都是数据库报出来的,这也是我通过SharePoint Log文件中得到的信息,所以就开始针对数据库动手了。
16. 首先需要将消费场中的系统账户,添加到发布场中3个User Profile的数据库中并赋予Owner的权限。这一步很关键,如果不做这一步,关注功能就没戏了,当然如果你的两个场使用的同一个系统账户,那就没问题了。实际生产环境中基本也不会用同一个。
17. 需要在发布场防火墙中开启1433的端口,如果你的数据库端口换了,就开启你换的那个。推荐在生产环境中,更换1433的端口。
知道这里才算是大功告成。
找个用户点一下消费场的网站关注功能看看。如果能像图中标注那样,那证明你成功了。如果还有错误,你可以发邮件给我。我帮你分析下原因。
后面的一篇blog将介绍多个场中都有User Profile Services情况下将如何设置。当然如果你能根据这篇内容就配置出来第二个场景来,说明你已经清楚了跨场发布都在干些什么了。
参考文献
http://technet.microsoft.com/ZH-CN/library/ee704552.aspx
http://technet.microsoft.com/ZH-CN/library/ee704545.aspx
http://technet.microsoft.com/ZH-CN/library/ff700211.aspx
http://technet.microsoft.com/ZH-CN/library/jj992595.aspx