SharePoint中的RSS WebPart只要访问需要认证的RSS Feed的时候就会失败.
错误信息
================
“The RSS webpart does not support authenticated feeds”
当RSS Web Part试图展示SharePoint站点自身上的列表内容的时候, 如果SharePoint站点不支持匿名访问, 那么上面的错误就会报出来了.
那么有没有办法既让RSS web part可以显示站点自身的数据, 同时又需要用户通过认证才能访问站点呢?
答案是可以的. 那就是让站点使用Kerberos认证. RSS Web Part只支持一种认证模式, 那就是Kerberos.
然而有一个客户她的环境里就配了Kerberos, 但是她的RSS web part还是会报上面的错误.
她的场里有两台WFE, 使用一个Host Header作为Network Load Balancer的名字.
1. 用户请求带有RSS web part的页面 –> WFE1
2. WFE1试图展示页面上所有的web part, 发现有个RSS web part, 于是再发一个http请求给Rss web part里配置的RSS Feed URL. 即再发一个请求给站点自己.
3. 由于有两个WFE, 那么这个请求有可能被另一个WFE处理, 也有可能自己处理.
4. 两个WFE之间通信的时候使用NTLM认证, 于是RSS Web Part显示失败.
尝试过的步骤
=================
通过下面的方式禁止任何的NTLM认证.
1. 修改每台WFE上的host文件, 让Host Header指向127.0.0.1. 防止请求发给另一个WFE.
2. 删除下面的注册表键值
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\BackConnectionHostNames"
3. 执行下面的步骤, 禁止LoopBackCheck.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
经过上面的步骤, 我们发现该问题依然存在. SharePoint服务器在修改了host文件的情况下依然会发出Internal RSS request.
经过进一步的研究, 我们发现该客户的内外网络间配置了防火墙, 该防火墙还扮演着Proxy的角色.
因为SharePoint两台前端上都配置了代理, 因为这个原因, 请求在修改了host文件的情况下还是会发到网络上, 从而被另一台WFE接收.
防火墙在转发请求的时候却使用了不该使用的NTLM认证方式, SharePoint于是向用户发出认证要求, 方式正是NTLM. 由于NTLM认证不会被RSS web part所接受, 于是错误发生了.
解决方案
=============
为"Use any authentication protocol"配置constrained delegation.
将SharePoint所使用的apppool帐号, farm admin帐号都添加到该配置中.
这里的配置(即"Use any authentication protocol")可以让用户使用NTLM认证协议访问WFE服务器, 然后WFE服务器可以impersonate该用户并使用Kerberos认证协议来访问其他服务器.
问题解决.